Merge branch 'android12-5.10' into android12-5.10-lts

Sync up with android12-5.10 for the following commits:

dd139186ef ANDROID: usb: gadget: fix NULL pointer dereference in android_setup
07f65598af ANDROID: GKI: Disable kmem cgroup accounting
309aa7e7a2 FROMLIST: mm, memcg: inline swap-related functions to improve disabled memcg config
3ae8e2f183 BACKPORT: FROMLIST: mm, memcg: inline mem_cgroup_{charge/uncharge} to improve disabled memcg config
f73d029485 FROMLIST: mm, memcg: add mem_cgroup_disabled checks in vmpressure and swap-related functions
669df367a9 UPSTREAM: mm/memcg: bail early from swap accounting if memcg disabled
1f0c32a667 UPSTREAM: procfs/dmabuf: add inode number to /proc/*/fdinfo
0c8c125f57 UPSTREAM: procfs: allow reading fdinfo with PTRACE_MODE_READ
2e0476a465 Revert "FROMLIST: procfs: Allow reading fdinfo with PTRACE_MODE_READ"
5ded961aa2 Revert "FROMLIST: BACKPORT: procfs/dmabuf: Add inode number to /..."
3ee5565017 UPSTREAM: f2fs: initialize page->private when using for our internal use
dba79c3af3 ANDROID: mm: page_pinner: report test_page_isolation_failure
13362ab28e ANDROID: mm: page_pinner: add state of page_pinner
3254948484 ANDROID: mm: page_pinner: add more struct page fields
0445b67bee ANDROID: mm: page_pinner: change timestamp format
71da06728c ANDROID: mm: page_pinner: print_page_pinner refactoring
b83e564914 ANDROID: mm: page_pinner: remove shared_count
849f048050 ANDROID: mm: page_pinner: remove WARN_ON_ONCE
9a453100fc ANDROID: mm: page_pinner: fix typos
d012783a86 ANDROID: mm: page_pinner: reset migration failed page
470cce5085 ANDROID: mm: page_pinner: record every put_page
9f47e5fdda ANDROID: mm: page_pinner: change function names
a8385d61f2 ANDROID: Allow vendor module to reclaim a memcg
f41a95eadc ANDROID: Export memcg functions to allow module to add new files
46bf3b94e7 FROMGIT: dt-bindings: usb: dwc3: Update dwc3 TX fifo properties
b36b813e39 UPSTREAM: dt-bindings: usb: Convert DWC USB3 bindings to DT schema
9a80b7b728 FROMGIT: of: Add stub for of_add_property()
2742be5903 ANDROID: fips140: define fips_enabled to 1 to enable FIPS behavior
e886dd4c33 ANDROID: fips140: unregister existing DRBG algorithms
634445a640 ANDROID: fips140: fix deadlock in unregister_existing_fips140_algos()
0af06624ea ANDROID: fips140: check for errors from initcalls
92de53472e ANDROID: fips140: log already-live algorithms
0a7da21583 ANDROID: Update new mtk gki symbol
98085b5dd8 ANDROID: usb: Add vendor hook for usb suspend and resume
956db89e71 BACKPORT: FROMLIST: dma-heap: Let dma heap use dma_map_attrs to map & unmap iova
749d6e7f2c ANDROID: abi_gki_aarch64_qcom: Add vendor hook for shmem_alloc_page
b05bbe48be ANDROID: abi_gki_aarch64_qcom: Add reclaim_shmem_address_space
d80c70d7a8 ANDROID: android: export kernel function arch_mmap_rnd
25c7eb4932 ANDROID: mm: shmem: Fix build break with allnoconfig
1cdcf76b15 ANDROID: vendor_hooks: add hooks in mem_cgroup subsystem
726468dd4a ANDROID: GKI: add vendor padding variable in struct skb_shared_info
fc79c93657 FROMLIST: scsi: ufs: add quirk to enable host controller without interface configuration
2d5ae6b787 FROMLIST: scsi: ufs: add quirk to handle broken UIC command
38abaebab7 ANDROID: syscall_check: add vendor hook for bpf syscall
a7a3b31d58 ANDROID: syscall_check: add vendor hook for open syscall
a5543c9cd7 ANDROID: syscall_check: add vendor hook for mmap syscall
1f0769279f ANDROID: GKI: Add symbol to symbol list
2cff74e08c ANDROID: vendor_hooks: Add vendor hook to the net
25edba0d4d FROMLIST: scsi: ufs: Fix the SCSI abort handler
c0efdc4a5e ANDROID: android: export kernel function vm_unmapped_area
964220d080 ANDROID: shmem: vendor hook in shmem_alloc_page
bd2ca0ba5b FROMLIST: pstore/ram: Rework logic for detecting ramoops reserved memory region
daeabfe7fa ANDROID: mm: add reclaim_shmem_address_space() for faster reclaims
4c3dddf408 ANDROID: Update the generic ABI symbol list
4c4d8cbdef ANDROID: GKI: refresh ABI XML
01e4a037d8 ANDROID: GKI: turn on TIDY_ABI
edf973fd24 ANDROID: Update symbol list for VIVO
1702d2c8b7 FROMGIT: net: cdc_ncm: switch to eth%d interface naming
f4d6e8324c ANDROID: GKI: add allowed GKI symbol for Exynosauto SoC
444a0b7752 ANDROID: mm: add vendor hook for vmpressure
c799c6644b ANDROID: fips140: adjust some log messages
091338cb39 ANDROID: fips140: add missing static keyword to fips140_init()
70bfd6a7e0 ANDROID: GKI: update allowed list for exynosauto SoC
3e3147b280 UPSTREAM: scsi: ufs: ufshcd: Fix some function doc-rot
2c553e754f UPSTREAM: scsi: ufs: Adjust ufshcd_hold() during sending attribute requests
52ccdf90b9 FROMLIST: lockdep: Remove console_verbose when disable lock debugging
4458494476 ANDROID: ABI: qcom: Add symbols for 80211
5c51579fde ANDROID: fork: Export task_newtask tracepoint
e2a90797e8 ANDROID: Fix kernelci warnings for indentation in smp.c
bac33eaebf ANDROID: irqchip: gic-v3: Move struct gic_chip_data to header
bdac4418bf ANDROID: abi_gki_aarch64_qcom: Add android_vh_ufs_clock_scaling
65c1de0f06 ANDROID: Update symbol list for mtk
d4d02ab9b0 UPSTREAM: swiotlb: manipulate orig_addr when tlb_addr has offset
58aa0f2832 ANDROID: qcom: Add net related symbol
2f9f816445 ANDROID: Update the exynos symbol list
b2a9471239 ANDROID: Update symbol list for mtk
7c9599e204 FROMGIT: usb: dwc3: Create helper function getting MDWIDTH
0a24affb86 ANDROID: vendor_hooks: modify the function name
d686d5ffc6 ANDROID: GKI: Add some symbols to symbol list
bdfb11230b ANDROID: cpuidle: Allow for an early exit from cpuidle_enter_state()
f0b280c395 ANDROID: cpuidle: Update cpuidle_uninstall_idle_handler() to wakeup all online CPUs
14dd90ab37 ANDROID: scsi: ufs: Add hook to influence the UFS clock scaling policy
00aec39e2e FROMGIT: bpf: Support all gso types in bpf_skb_change_proto()

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I6e5be89f3f02c420237a549f4c6a08b5ed434581
This commit is contained in:
Greg Kroah-Hartman
2021-07-13 15:00:11 +02:00
63 changed files with 118666 additions and 172877 deletions

View File

@@ -1,128 +0,0 @@
synopsys DWC3 CORE
DWC3- USB3 CONTROLLER. Complies to the generic USB binding properties
as described in 'usb/generic.txt'
Required properties:
- compatible: must be "snps,dwc3"
- reg : Address and length of the register set for the device
- interrupts: Interrupts used by the dwc3 controller.
- clock-names: list of clock names. Ideally should be "ref",
"bus_early", "suspend" but may be less or more.
- clocks: list of phandle and clock specifier pairs corresponding to
entries in the clock-names property.
Exception for clocks:
clocks are optional if the parent node (i.e. glue-layer) is compatible to
one of the following:
"cavium,octeon-7130-usb-uctl"
"qcom,dwc3"
"samsung,exynos5250-dwusb3"
"samsung,exynos5433-dwusb3"
"samsung,exynos7-dwusb3"
"sprd,sc9860-dwc3"
"st,stih407-dwc3"
"ti,am437x-dwc3"
"ti,dwc3"
"ti,keystone-dwc3"
"rockchip,rk3399-dwc3"
"xlnx,zynqmp-dwc3"
Optional properties:
- usb-phy : array of phandle for the PHY device. The first element
in the array is expected to be a handle to the USB2/HS PHY and
the second element is expected to be a handle to the USB3/SS PHY
- phys: from the *Generic PHY* bindings
- phy-names: from the *Generic PHY* bindings; supported names are "usb2-phy"
or "usb3-phy".
- resets: set of phandle and reset specifier pairs
- snps,usb2-lpm-disable: indicate if we don't want to enable USB2 HW LPM
- snps,usb3_lpm_capable: determines if platform is USB3 LPM capable
- snps,dis-start-transfer-quirk: when set, disable isoc START TRANSFER command
failure SW work-around for DWC_usb31 version 1.70a-ea06
and prior.
- snps,disable_scramble_quirk: true when SW should disable data scrambling.
Only really useful for FPGA builds.
- snps,has-lpm-erratum: true when DWC3 was configured with LPM Erratum enabled
- snps,lpm-nyet-threshold: LPM NYET threshold
- snps,u2exit_lfps_quirk: set if we want to enable u2exit lfps quirk
- snps,u2ss_inp3_quirk: set if we enable P3 OK for U2/SS Inactive quirk
- snps,req_p1p2p3_quirk: when set, the core will always request for
P1/P2/P3 transition sequence.
- snps,del_p1p2p3_quirk: when set core will delay P1/P2/P3 until a certain
amount of 8B10B errors occur.
- snps,del_phy_power_chg_quirk: when set core will delay PHY power change
from P0 to P1/P2/P3.
- snps,lfps_filter_quirk: when set core will filter LFPS reception.
- snps,rx_detect_poll_quirk: when set core will disable a 400us delay to start
Polling LFPS after RX.Detect.
- snps,tx_de_emphasis_quirk: when set core will set Tx de-emphasis value.
- snps,tx_de_emphasis: the value driven to the PHY is controlled by the
LTSSM during USB3 Compliance mode.
- snps,dis_u3_susphy_quirk: when set core will disable USB3 suspend phy.
- snps,dis_u2_susphy_quirk: when set core will disable USB2 suspend phy.
- snps,dis_enblslpm_quirk: when set clears the enblslpm in GUSB2PHYCFG,
disabling the suspend signal to the PHY.
- snps,dis-u1-entry-quirk: set if link entering into U1 needs to be disabled.
- snps,dis-u2-entry-quirk: set if link entering into U2 needs to be disabled.
- snps,dis_rxdet_inp3_quirk: when set core will disable receiver detection
in PHY P3 power state.
- snps,dis-u2-freeclk-exists-quirk: when set, clear the u2_freeclk_exists
in GUSB2PHYCFG, specify that USB2 PHY doesn't provide
a free-running PHY clock.
- snps,dis-del-phy-power-chg-quirk: when set core will change PHY power
from P0 to P1/P2/P3 without delay.
- snps,dis-tx-ipgap-linecheck-quirk: when set, disable u2mac linestate check
during HS transmit.
- snps,parkmode-disable-ss-quirk: when set, all SuperSpeed bus instances in
park mode are disabled.
- snps,dis_metastability_quirk: when set, disable metastability workaround.
CAUTION: use only if you are absolutely sure of it.
- snps,dis-split-quirk: when set, change the way URBs are handled by the
driver. Needed to avoid -EPROTO errors with usbhid
on some devices (Hikey 970).
- snps,is-utmi-l1-suspend: true when DWC3 asserts output signal
utmi_l1_suspend_n, false when asserts utmi_sleep_n
- snps,hird-threshold: HIRD threshold
- snps,hsphy_interface: High-Speed PHY interface selection between "utmi" for
UTMI+ and "ulpi" for ULPI when the DWC_USB3_HSPHY_INTERFACE has value 3.
- snps,quirk-frame-length-adjustment: Value for GFLADJ_30MHZ field of GFLADJ
register for post-silicon frame length adjustment when the
fladj_30mhz_sdbnd signal is invalid or incorrect.
- snps,rx-thr-num-pkt-prd: periodic ESS RX packet threshold count - host mode
only. Set this and rx-max-burst-prd to a valid,
non-zero value 1-16 (DWC_usb31 programming guide
section 1.2.4) to enable periodic ESS RX threshold.
- snps,rx-max-burst-prd: max periodic ESS RX burst size - host mode only. Set
this and rx-thr-num-pkt-prd to a valid, non-zero value
1-16 (DWC_usb31 programming guide section 1.2.4) to
enable periodic ESS RX threshold.
- snps,tx-thr-num-pkt-prd: periodic ESS TX packet threshold count - host mode
only. Set this and tx-max-burst-prd to a valid,
non-zero value 1-16 (DWC_usb31 programming guide
section 1.2.3) to enable periodic ESS TX threshold.
- snps,tx-max-burst-prd: max periodic ESS TX burst size - host mode only. Set
this and tx-thr-num-pkt-prd to a valid, non-zero value
1-16 (DWC_usb31 programming guide section 1.2.3) to
enable periodic ESS TX threshold.
- <DEPRECATED> tx-fifo-resize: determines if the FIFO *has* to be reallocated.
- snps,incr-burst-type-adjustment: Value for INCR burst type of GSBUSCFG0
register, undefined length INCR burst type enable and INCRx type.
When just one value, which means INCRX burst mode enabled. When
more than one value, which means undefined length INCR burst type
enabled. The values can be 1, 4, 8, 16, 32, 64, 128 and 256.
- in addition all properties from usb-xhci.txt from the current directory are
supported as well
This is usually a subnode to DWC3 glue to which it is connected.
dwc3@4a030000 {
compatible = "snps,dwc3";
reg = <0x4a030000 0xcfff>;
interrupts = <0 92 4>
usb-phy = <&usb2_phy>, <&usb3,phy>;
snps,incr-burst-type-adjustment = <1>, <4>, <8>, <16>;
};

View File

@@ -0,0 +1,323 @@
# SPDX-License-Identifier: GPL-2.0
%YAML 1.2
---
$id: http://devicetree.org/schemas/usb/snps,dwc3.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Synopsys DesignWare USB3 Controller
maintainers:
- Felipe Balbi <balbi@kernel.org>
description:
This is usually a subnode to DWC3 glue to which it is connected, but can also
be presented as a standalone DT node with an optional vendor-specific
compatible string.
allOf:
- $ref: usb-drd.yaml#
- if:
properties:
dr_mode:
const: peripheral
required:
- dr_mode
then:
$ref: usb.yaml#
else:
$ref: usb-xhci.yaml#
properties:
compatible:
contains:
const: snps,dwc3
interrupts:
minItems: 1
maxItems: 3
clocks:
description:
In general the core supports three types of clocks. bus_early is a
SoC Bus Clock (AHB/AXI/Native). ref generates ITP when the UTMI/ULPI
PHY is suspended. suspend clocks a small part of the USB3 core when
SS PHY in P3. But particular cases may differ from that having less
or more clock sources with another names.
clock-names:
contains:
anyOf:
- enum: [bus_early, ref, suspend]
- true
usb-phy:
minItems: 1
items:
- description: USB2/HS PHY
- description: USB3/SS PHY
phys:
minItems: 1
items:
- description: USB2/HS PHY
- description: USB3/SS PHY
phy-names:
minItems: 1
items:
- const: usb2-phy
- const: usb3-phy
resets:
minItems: 1
snps,usb2-lpm-disable:
description: Indicate if we don't want to enable USB2 HW LPM
type: boolean
snps,usb3_lpm_capable:
description: Determines if platform is USB3 LPM capable
type: boolean
snps,dis-start-transfer-quirk:
description:
When set, disable isoc START TRANSFER command failure SW work-around
for DWC_usb31 version 1.70a-ea06 and prior.
type: boolean
snps,disable_scramble_quirk:
description:
True when SW should disable data scrambling. Only really useful for FPGA
builds.
type: boolean
snps,has-lpm-erratum:
description: True when DWC3 was configured with LPM Erratum enabled
type: boolean
snps,lpm-nyet-threshold:
description: LPM NYET threshold
$ref: /schemas/types.yaml#/definitions/uint8
snps,u2exit_lfps_quirk:
description: Set if we want to enable u2exit lfps quirk
type: boolean
snps,u2ss_inp3_quirk:
description: Set if we enable P3 OK for U2/SS Inactive quirk
type: boolean
snps,req_p1p2p3_quirk:
description:
When set, the core will always request for P1/P2/P3 transition sequence.
type: boolean
snps,del_p1p2p3_quirk:
description:
When set core will delay P1/P2/P3 until a certain amount of 8B10B errors
occur.
type: boolean
snps,del_phy_power_chg_quirk:
description: When set core will delay PHY power change from P0 to P1/P2/P3.
type: boolean
snps,lfps_filter_quirk:
description: When set core will filter LFPS reception.
type: boolean
snps,rx_detect_poll_quirk:
description:
when set core will disable a 400us delay to start Polling LFPS after
RX.Detect.
type: boolean
snps,tx_de_emphasis_quirk:
description: When set core will set Tx de-emphasis value
type: boolean
snps,tx_de_emphasis:
description:
The value driven to the PHY is controlled by the LTSSM during USB3
Compliance mode.
$ref: /schemas/types.yaml#/definitions/uint8
snps,dis_u3_susphy_quirk:
description: When set core will disable USB3 suspend phy
type: boolean
snps,dis_u2_susphy_quirk:
description: When set core will disable USB2 suspend phy
type: boolean
snps,dis_enblslpm_quirk:
description:
When set clears the enblslpm in GUSB2PHYCFG, disabling the suspend signal
to the PHY.
type: boolean
snps,dis-u1-entry-quirk:
description: Set if link entering into U1 needs to be disabled
type: boolean
snps,dis-u2-entry-quirk:
description: Set if link entering into U2 needs to be disabled
type: boolean
snps,dis_rxdet_inp3_quirk:
description:
When set core will disable receiver detection in PHY P3 power state.
type: boolean
snps,dis-u2-freeclk-exists-quirk:
description:
When set, clear the u2_freeclk_exists in GUSB2PHYCFG, specify that USB2
PHY doesn't provide a free-running PHY clock.
type: boolean
snps,dis-del-phy-power-chg-quirk:
description:
When set core will change PHY power from P0 to P1/P2/P3 without delay.
type: boolean
snps,dis-tx-ipgap-linecheck-quirk:
description: When set, disable u2mac linestate check during HS transmit
type: boolean
snps,parkmode-disable-ss-quirk:
description:
When set, all SuperSpeed bus instances in park mode are disabled.
type: boolean
snps,dis_metastability_quirk:
description:
When set, disable metastability workaround. CAUTION! Use only if you are
absolutely sure of it.
type: boolean
snps,dis-split-quirk:
description:
When set, change the way URBs are handled by the driver. Needed to
avoid -EPROTO errors with usbhid on some devices (Hikey 970).
type: boolean
snps,is-utmi-l1-suspend:
description:
True when DWC3 asserts output signal utmi_l1_suspend_n, false when
asserts utmi_sleep_n.
type: boolean
snps,hird-threshold:
description: HIRD threshold
$ref: /schemas/types.yaml#/definitions/uint8
snps,hsphy_interface:
description:
High-Speed PHY interface selection between UTMI+ and ULPI when the
DWC_USB3_HSPHY_INTERFACE has value 3.
$ref: /schemas/types.yaml#/definitions/uint8
enum: [utmi, ulpi]
snps,quirk-frame-length-adjustment:
description:
Value for GFLADJ_30MHZ field of GFLADJ register for post-silicon frame
length adjustment when the fladj_30mhz_sdbnd signal is invalid or
incorrect.
$ref: /schemas/types.yaml#/definitions/uint32
snps,rx-thr-num-pkt-prd:
description:
Periodic ESS RX packet threshold count (host mode only). Set this and
snps,rx-max-burst-prd to a valid, non-zero value 1-16 (DWC_usb31
programming guide section 1.2.4) to enable periodic ESS RX threshold.
$ref: /schemas/types.yaml#/definitions/uint8
minimum: 1
maximum: 16
snps,rx-max-burst-prd:
description:
Max periodic ESS RX burst size (host mode only). Set this and
snps,rx-thr-num-pkt-prd to a valid, non-zero value 1-16 (DWC_usb31
programming guide section 1.2.4) to enable periodic ESS RX threshold.
$ref: /schemas/types.yaml#/definitions/uint8
minimum: 1
maximum: 16
snps,tx-thr-num-pkt-prd:
description:
Periodic ESS TX packet threshold count (host mode only). Set this and
snps,tx-max-burst-prd to a valid, non-zero value 1-16 (DWC_usb31
programming guide section 1.2.3) to enable periodic ESS TX threshold.
$ref: /schemas/types.yaml#/definitions/uint8
minimum: 1
maximum: 16
snps,tx-max-burst-prd:
description:
Max periodic ESS TX burst size (host mode only). Set this and
snps,tx-thr-num-pkt-prd to a valid, non-zero value 1-16 (DWC_usb31
programming guide section 1.2.3) to enable periodic ESS TX threshold.
$ref: /schemas/types.yaml#/definitions/uint8
minimum: 1
maximum: 16
tx-fifo-resize:
description: Determines if the TX fifos can be dynamically resized depending
on the number of IN endpoints used and if bursting is supported. This
may help improve bandwidth on platforms with higher system latencies, as
increased fifo space allows for the controller to prefetch data into its
internal memory.
type: boolean
tx-fifo-max-num:
description: Specifies the max number of packets the txfifo resizing logic
can account for when higher endpoint bursting is used. (bMaxBurst > 6) The
higher the number, the more fifo space the txfifo resizing logic will
allocate for that endpoint.
$ref: /schemas/types.yaml#/definitions/uint8
minimum: 3
snps,incr-burst-type-adjustment:
description:
Value for INCR burst type of GSBUSCFG0 register, undefined length INCR
burst type enable and INCRx type. A single value means INCRX burst mode
enabled. If more than one value specified, undefined length INCR burst
type will be enabled with burst lengths utilized up to the maximum
of the values passed in this property.
$ref: /schemas/types.yaml#/definitions/uint32-array
minItems: 1
maxItems: 8
uniqueItems: true
items:
enum: [1, 4, 8, 16, 32, 64, 128, 256]
unevaluatedProperties: false
required:
- compatible
- reg
- interrupts
examples:
- |
usb@4a030000 {
compatible = "snps,dwc3";
reg = <0x4a030000 0xcfff>;
interrupts = <0 92 4>;
usb-phy = <&usb2_phy>, <&usb3_phy>;
snps,incr-burst-type-adjustment = <1>, <4>, <8>, <16>;
};
- |
usb@4a000000 {
compatible = "snps,dwc3";
reg = <0x4a000000 0xcfff>;
interrupts = <0 92 4>;
clocks = <&clk 1>, <&clk 2>, <&clk 3>;
clock-names = "bus_early", "ref", "suspend";
phys = <&usb2_phy>, <&usb3_phy>;
phy-names = "usb2-phy", "usb3-phy";
snps,dis_u2_susphy_quirk;
snps,dis_enblslpm_quirk;
};
...

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -3,13 +3,16 @@
add_wait_queue add_wait_queue
alloc_chrdev_region alloc_chrdev_region
__alloc_pages_nodemask __alloc_pages_nodemask
__alloc_percpu
alloc_workqueue alloc_workqueue
__arch_copy_from_user __arch_copy_from_user
__arch_copy_to_user __arch_copy_to_user
arm64_const_caps_ready arm64_const_caps_ready
arm64_use_ng_mappings arm64_use_ng_mappings
__arm_smccc_smc __arm_smccc_smc
atomic_notifier_call_chain
atomic_notifier_chain_register atomic_notifier_chain_register
atomic_notifier_chain_unregister
__bitmap_and __bitmap_and
blocking_notifier_call_chain blocking_notifier_call_chain
blocking_notifier_chain_register blocking_notifier_chain_register
@@ -49,6 +52,8 @@
cpumask_next cpumask_next
cpu_number cpu_number
__cpu_online_mask __cpu_online_mask
cpu_pm_register_notifier
__cpu_possible_mask
crc32_le crc32_le
__crypto_memneq __crypto_memneq
debugfs_create_dir debugfs_create_dir
@@ -60,7 +65,9 @@
del_timer del_timer
del_timer_sync del_timer_sync
destroy_workqueue destroy_workqueue
_dev_crit
dev_driver_string dev_driver_string
_dev_emerg
_dev_err _dev_err
device_create device_create
device_create_file device_create_file
@@ -172,6 +179,7 @@
free_irq free_irq
__free_pages __free_pages
free_pages free_pages
free_percpu
freezing_slow_path freezing_slow_path
generic_file_llseek generic_file_llseek
generic_handle_irq generic_handle_irq
@@ -197,6 +205,10 @@
handle_edge_irq handle_edge_irq
handle_level_irq handle_level_irq
handle_nested_irq handle_nested_irq
hrtimer_cancel
hrtimer_forward
hrtimer_init
hrtimer_start_range_ns
i2c_add_numbered_adapter i2c_add_numbered_adapter
i2c_del_driver i2c_del_driver
i2c_register_driver i2c_register_driver
@@ -224,6 +236,7 @@
irq_set_chip_and_handler_name irq_set_chip_and_handler_name
irq_set_chip_data irq_set_chip_data
irq_set_irq_wake irq_set_irq_wake
irq_to_desc
is_vmalloc_addr is_vmalloc_addr
jiffies jiffies
kasan_flag_enabled kasan_flag_enabled
@@ -337,6 +350,7 @@
param_ops_int param_ops_int
param_ops_uint param_ops_uint
PDE_DATA PDE_DATA
__per_cpu_offset
perf_trace_buf_alloc perf_trace_buf_alloc
perf_trace_run_bpf_submit perf_trace_run_bpf_submit
phy_power_off phy_power_off
@@ -439,11 +453,13 @@
simple_write_to_buffer simple_write_to_buffer
single_open single_open
single_release single_release
smp_call_function
snd_pcm_format_width snd_pcm_format_width
snd_soc_component_update_bits snd_soc_component_update_bits
snd_soc_component_write snd_soc_component_write
snd_soc_dai_set_fmt snd_soc_dai_set_fmt
snd_soc_dai_set_tdm_slot snd_soc_dai_set_tdm_slot
snd_soc_dai_set_tristate
snd_soc_info_volsw snd_soc_info_volsw
snd_soc_of_get_dai_link_codecs snd_soc_of_get_dai_link_codecs
snd_soc_of_get_dai_name snd_soc_of_get_dai_name
@@ -468,12 +484,14 @@
strncpy strncpy
strnlen strnlen
strstr strstr
__sw_hweight64
sync_file_create sync_file_create
sync_file_get_fence sync_file_get_fence
synchronize_irq synchronize_irq
syscon_regmap_lookup_by_phandle syscon_regmap_lookup_by_phandle
sysfs_create_file_ns sysfs_create_file_ns
sysfs_create_group sysfs_create_group
sysfs_create_groups
sysfs_remove_file_ns sysfs_remove_file_ns
sysfs_remove_group sysfs_remove_group
system_freezing_cnt system_freezing_cnt
@@ -581,12 +599,8 @@
kernel_kobj kernel_kobj
# required by dss.ko # required by dss.ko
__alloc_percpu
android_debug_symbol android_debug_symbol
arch_timer_read_counter arch_timer_read_counter
atomic_notifier_call_chain
__cpu_possible_mask
_dev_emerg
dump_backtrace dump_backtrace
init_task init_task
input_close_device input_close_device
@@ -594,18 +608,14 @@
input_register_handle input_register_handle
input_register_handler input_register_handler
input_unregister_handle input_unregister_handle
irq_to_desc
kmsg_dump_get_line kmsg_dump_get_line
kmsg_dump_rewind kmsg_dump_rewind
kstat kstat
nr_irqs nr_irqs
__per_cpu_offset
proc_create proc_create
register_die_notifier register_die_notifier
return_address return_address
rtc_time64_to_tm rtc_time64_to_tm
smp_call_function
sysfs_create_groups
sys_tz sys_tz
time64_to_tm time64_to_tm
__traceiter_android_vh_ipi_stop __traceiter_android_vh_ipi_stop
@@ -664,6 +674,21 @@
soc_device_register soc_device_register
subsys_system_register subsys_system_register
# required by exynos-coresight.ko
__cpuhp_setup_state_cpuslocked
cpu_pm_unregister_notifier
of_prop_next_u32
# required by exynos-debug-test.ko
_ctype
kstrtoll
remove_cpu
smp_call_function_single
strsep
# required by exynos-ehld.ko
sprint_symbol
# required by exynos-pd.ko # required by exynos-pd.ko
of_genpd_add_provider_simple of_genpd_add_provider_simple
pm_genpd_add_subdomain pm_genpd_add_subdomain
@@ -867,6 +892,12 @@
mod_delayed_work_on mod_delayed_work_on
put_vaddr_frames put_vaddr_frames
# required by hardlockup-watchdog.ko
__cpuhp_setup_state
cpus_read_lock
cpus_read_unlock
smp_call_on_cpu
# required by i2c-exynosauto.ko # required by i2c-exynosauto.ko
i2c_del_adapter i2c_del_adapter
@@ -900,10 +931,6 @@
get_user_pages_fast get_user_pages_fast
get_user_pages_remote get_user_pages_remote
hrtimer_active hrtimer_active
hrtimer_cancel
hrtimer_forward
hrtimer_init
hrtimer_start_range_ns
kstrtobool_from_user kstrtobool_from_user
ktime_get_raw ktime_get_raw
kvfree_call_rcu kvfree_call_rcu
@@ -928,7 +955,6 @@
static_key_slow_inc static_key_slow_inc
strncasecmp strncasecmp
__sw_hweight32 __sw_hweight32
__sw_hweight64
synchronize_rcu synchronize_rcu
sysfs_streq sysfs_streq
system_highpri_wq system_highpri_wq
@@ -970,6 +996,15 @@
drm_panel_remove drm_panel_remove
# required by pcie-exynos-dw-ep.ko # required by pcie-exynos-dw-ep.ko
dw_pcie_ep_init
dw_pcie_read_dbi
dw_pcie_write_dbi
pci_epc_clear_bar
pci_epc_map_addr
pci_epc_mem_alloc_addr
pci_epc_mem_free_addr
pci_epc_set_bar
pci_epc_unmap_addr
# required by pcie-exynos-dw-rc.ko # required by pcie-exynos-dw-rc.ko
bitmap_find_free_region bitmap_find_free_region
@@ -987,6 +1022,7 @@
irq_domain_set_info irq_domain_set_info
irq_domain_update_bus_token irq_domain_update_bus_token
pcie_get_mps pcie_get_mps
pcie_set_mps
pci_find_bus pci_find_bus
pci_generic_config_read pci_generic_config_read
pci_generic_config_write pci_generic_config_write
@@ -995,12 +1031,15 @@
pci_msi_create_irq_domain pci_msi_create_irq_domain
pci_msi_mask_irq pci_msi_mask_irq
pci_msi_unmask_irq pci_msi_unmask_irq
pci_num_vf
pci_rescan_bus pci_rescan_bus
pci_restore_state pci_restore_state
pci_save_state pci_save_state
pci_store_saved_state pci_store_saved_state
# required by pcs-xpcs.ko # required by pcs-xpcs.ko
mdiobus_read
mdiobus_write
# required by pinctrl-samsung-core.ko # required by pinctrl-samsung-core.ko
devm_gpiochip_add_data_with_key devm_gpiochip_add_data_with_key
@@ -1056,6 +1095,9 @@
kthread_destroy_worker kthread_destroy_worker
kthread_mod_delayed_work kthread_mod_delayed_work
kthread_queue_delayed_work kthread_queue_delayed_work
ktime_get_snapshot
posix_clock_register
posix_clock_unregister
# required by reboot-mode.ko # required by reboot-mode.ko
devres_free devres_free
@@ -1074,7 +1116,6 @@
watchdog_unregister_device watchdog_unregister_device
# required by sam-is.ko # required by sam-is.ko
atomic_notifier_chain_unregister
get_task_pid get_task_pid
i2c_get_adapter i2c_get_adapter
i2c_new_client_device i2c_new_client_device
@@ -1113,10 +1154,13 @@
__bitmap_andnot __bitmap_andnot
consume_skb consume_skb
dev_close dev_close
device_get_phy_mode
device_set_wakeup_capable device_set_wakeup_capable
device_set_wakeup_enable device_set_wakeup_enable
__dev_kfree_skb_any __dev_kfree_skb_any
dev_open dev_open
dql_completed
dql_reset
eth_mac_addr eth_mac_addr
ethtool_op_get_link ethtool_op_get_link
ethtool_op_get_ts_info ethtool_op_get_ts_info
@@ -1127,13 +1171,16 @@
jiffies_to_usecs jiffies_to_usecs
mdiobus_alloc_size mdiobus_alloc_size
mdiobus_free mdiobus_free
mdiobus_get_phy
__mdiobus_register __mdiobus_register
mdiobus_unregister mdiobus_unregister
napi_complete_done napi_complete_done
napi_disable napi_disable
napi_gro_receive napi_gro_receive
__napi_schedule __napi_schedule
__napi_schedule_irqoff
napi_schedule_prep napi_schedule_prep
netdev_alert
__netdev_alloc_skb __netdev_alloc_skb
netdev_err netdev_err
netdev_info netdev_info
@@ -1149,9 +1196,32 @@
netif_set_real_num_tx_queues netif_set_real_num_tx_queues
netif_tx_wake_queue netif_tx_wake_queue
net_ratelimit net_ratelimit
of_get_mac_address
of_mdiobus_register
of_phy_deregister_fixed_link
of_phy_is_fixed_link
of_phy_register_fixed_link
phy_attached_info
phy_disconnect phy_disconnect
phy_ethtool_get_eee
phy_ethtool_ksettings_get
phy_ethtool_ksettings_set
phy_ethtool_nway_reset phy_ethtool_nway_reset
phy_ethtool_set_eee
phy_get_eee_err
phy_init_eee
phylink_connect_phy
phylink_create
phylink_destroy
phylink_of_phy_connect
phylink_set_port_modes
phylink_start
phy_mac_interrupt
phy_mii_ioctl
phy_resume
phy_start_aneg
phy_stop phy_stop
phy_suspend
pinctrl_pm_select_default_state pinctrl_pm_select_default_state
pinctrl_pm_select_sleep_state pinctrl_pm_select_sleep_state
platform_get_irq_byname platform_get_irq_byname
@@ -1262,6 +1332,7 @@
snd_pcm_lib_preallocate_free_for_all snd_pcm_lib_preallocate_free_for_all
snd_pcm_lib_preallocate_pages snd_pcm_lib_preallocate_pages
snd_pcm_period_elapsed snd_pcm_period_elapsed
snd_pcm_release_substream
snd_soc_component_init_regmap snd_soc_component_init_regmap
snd_soc_component_read snd_soc_component_read
snd_soc_dapm_add_routes snd_soc_dapm_add_routes
@@ -1274,7 +1345,6 @@
snd_soc_unregister_component snd_soc_unregister_component
# required by snd-soc-tas6424.ko # required by snd-soc-tas6424.ko
_dev_crit
regcache_cache_only regcache_cache_only
snd_soc_get_volsw snd_soc_get_volsw
snd_soc_put_volsw snd_soc_put_volsw
@@ -1308,6 +1378,7 @@
ufshcd_config_pwr_mode ufshcd_config_pwr_mode
ufshcd_dme_get_attr ufshcd_dme_get_attr
ufshcd_dme_set_attr ufshcd_dme_set_attr
ufshcd_init
ufshcd_link_recovery ufshcd_link_recovery
ufshcd_pltfrm_init ufshcd_pltfrm_init
ufshcd_remove ufshcd_remove

View File

@@ -544,9 +544,11 @@
drm_atomic_normalize_zpos drm_atomic_normalize_zpos
drm_atomic_private_obj_fini drm_atomic_private_obj_fini
drm_atomic_private_obj_init drm_atomic_private_obj_init
drm_atomic_set_crtc_for_connector
drm_atomic_set_crtc_for_plane drm_atomic_set_crtc_for_plane
drm_atomic_set_fb_for_plane drm_atomic_set_fb_for_plane
drm_atomic_set_mode_for_crtc drm_atomic_set_mode_for_crtc
drm_atomic_set_mode_prop_for_crtc
drm_atomic_state_alloc drm_atomic_state_alloc
drm_atomic_state_clear drm_atomic_state_clear
__drm_atomic_state_free __drm_atomic_state_free

View File

@@ -15,18 +15,15 @@
__alloc_disk_node __alloc_disk_node
alloc_etherdev_mqs alloc_etherdev_mqs
alloc_io_pgtable_ops alloc_io_pgtable_ops
alloc_netdev_mqs
alloc_pages_exact alloc_pages_exact
__alloc_pages_nodemask __alloc_pages_nodemask
__alloc_percpu __alloc_percpu
__alloc_skb __alloc_skb
alloc_workqueue alloc_workqueue
all_vm_events
android_debug_symbol android_debug_symbol
android_rvh_probe_register android_rvh_probe_register
anon_inode_getfd anon_inode_getfd
anon_inode_getfile anon_inode_getfile
__arch_clear_user
__arch_copy_from_user __arch_copy_from_user
__arch_copy_to_user __arch_copy_to_user
arch_timer_read_counter arch_timer_read_counter
@@ -45,12 +42,10 @@
bio_endio bio_endio
__bitmap_andnot __bitmap_andnot
__bitmap_clear __bitmap_clear
__bitmap_equal
bitmap_find_free_region bitmap_find_free_region
bitmap_find_next_zero_area_off bitmap_find_next_zero_area_off
bitmap_free bitmap_free
bitmap_from_arr32 bitmap_from_arr32
__bitmap_or
bitmap_print_to_pagebuf bitmap_print_to_pagebuf
bitmap_release_region bitmap_release_region
__bitmap_set __bitmap_set
@@ -70,6 +65,7 @@
blocking_notifier_call_chain blocking_notifier_call_chain
blocking_notifier_chain_register blocking_notifier_chain_register
blocking_notifier_chain_unregister blocking_notifier_chain_unregister
bpf_trace_run12
bpf_trace_run1 bpf_trace_run1
bpf_trace_run2 bpf_trace_run2
bpf_trace_run3 bpf_trace_run3
@@ -82,7 +78,6 @@
bus_register bus_register
bus_set_iommu bus_set_iommu
bus_unregister bus_unregister
cache_line_size
cancel_delayed_work cancel_delayed_work
cancel_delayed_work_sync cancel_delayed_work_sync
cancel_work_sync cancel_work_sync
@@ -93,6 +88,8 @@
cdev_device_del cdev_device_del
cdev_init cdev_init
__cfi_slowpath __cfi_slowpath
cgroup_taskset_first
cgroup_taskset_next
__check_object_size __check_object_size
check_preempt_curr check_preempt_curr
__class_create __class_create
@@ -101,7 +98,6 @@
class_for_each_device class_for_each_device
__class_register __class_register
class_unregister class_unregister
clear_page
__ClearPageMovable __ClearPageMovable
clk_bulk_disable clk_bulk_disable
clk_bulk_enable clk_bulk_enable
@@ -209,8 +205,6 @@
cpumask_next_and cpumask_next_and
cpu_number cpu_number
__cpu_online_mask __cpu_online_mask
cpu_pm_register_notifier
cpu_pm_unregister_notifier
__cpu_possible_mask __cpu_possible_mask
__cpu_present_mask __cpu_present_mask
cpu_scale cpu_scale
@@ -247,12 +241,12 @@
debugfs_create_file debugfs_create_file
debugfs_create_regset32 debugfs_create_regset32
debugfs_create_symlink debugfs_create_symlink
debugfs_create_u16
debugfs_create_u32 debugfs_create_u32
debugfs_create_u64 debugfs_create_u64
debugfs_create_x32 debugfs_create_x32
debugfs_lookup debugfs_lookup
debugfs_remove debugfs_remove
debug_locks_off
dec_zone_page_state dec_zone_page_state
default_llseek default_llseek
deferred_free deferred_free
@@ -266,24 +260,19 @@
_dev_emerg _dev_emerg
_dev_err _dev_err
dev_err_probe dev_err_probe
devfreq_add_device
devfreq_add_governor devfreq_add_governor
devfreq_cooling_unregister
devfreq_get_devfreq_by_phandle devfreq_get_devfreq_by_phandle
devfreq_monitor_resume devfreq_monitor_resume
devfreq_monitor_start devfreq_monitor_start
devfreq_monitor_stop devfreq_monitor_stop
devfreq_monitor_suspend devfreq_monitor_suspend
devfreq_recommended_opp devfreq_recommended_opp
devfreq_register_opp_notifier
devfreq_remove_device devfreq_remove_device
devfreq_remove_governor devfreq_remove_governor
devfreq_resume_device devfreq_resume_device
devfreq_suspend_device devfreq_suspend_device
devfreq_unregister_opp_notifier
devfreq_update_interval devfreq_update_interval
dev_fwnode dev_fwnode
dev_get_by_name
dev_get_regmap dev_get_regmap
dev_get_stats dev_get_stats
device_add device_add
@@ -365,7 +354,6 @@
devm_phy_create devm_phy_create
devm_phy_get devm_phy_get
devm_pinctrl_get devm_pinctrl_get
devm_pinctrl_put
devm_pinctrl_register_and_init devm_pinctrl_register_and_init
devm_platform_ioremap_resource devm_platform_ioremap_resource
devm_platform_ioremap_resource_byname devm_platform_ioremap_resource_byname
@@ -393,12 +381,13 @@
devm_thermal_zone_of_sensor_register devm_thermal_zone_of_sensor_register
devm_watchdog_register_device devm_watchdog_register_device
_dev_notice _dev_notice
dev_pm_domain_attach_by_name
dev_pm_domain_detach
dev_pm_genpd_add_notifier dev_pm_genpd_add_notifier
dev_pm_genpd_set_performance_state dev_pm_genpd_set_performance_state
dev_pm_opp_add dev_pm_opp_add
dev_pm_opp_find_freq_ceil dev_pm_opp_find_freq_ceil
dev_pm_opp_find_freq_ceil_by_volt dev_pm_opp_find_freq_ceil_by_volt
dev_pm_opp_find_freq_exact
dev_pm_opp_find_freq_floor dev_pm_opp_find_freq_floor
dev_pm_opp_get_freq dev_pm_opp_get_freq
dev_pm_opp_get_level dev_pm_opp_get_level
@@ -410,9 +399,7 @@
dev_pm_opp_of_remove_table dev_pm_opp_of_remove_table
dev_pm_opp_put dev_pm_opp_put
dev_pm_opp_put_opp_table dev_pm_opp_put_opp_table
dev_pm_opp_put_regulators
dev_pm_opp_remove_all_dynamic dev_pm_opp_remove_all_dynamic
dev_pm_opp_set_regulators
dev_pm_qos_update_request dev_pm_qos_update_request
dev_printk dev_printk
dev_queue_xmit dev_queue_xmit
@@ -439,7 +426,6 @@
dma_buf_fd dma_buf_fd
dma_buf_get dma_buf_get
dma_buf_map_attachment dma_buf_map_attachment
dma_buf_mmap
dmabuf_page_pool_alloc dmabuf_page_pool_alloc
dmabuf_page_pool_create dmabuf_page_pool_create
dmabuf_page_pool_destroy dmabuf_page_pool_destroy
@@ -452,10 +438,8 @@
dma_fence_context_alloc dma_fence_context_alloc
dma_fence_default_wait dma_fence_default_wait
dma_fence_free dma_fence_free
dma_fence_get_status
dma_fence_init dma_fence_init
dma_fence_release dma_fence_release
dma_fence_remove_callback
dma_fence_signal dma_fence_signal
dma_fence_signal_locked dma_fence_signal_locked
dma_fence_signal_timestamp_locked dma_fence_signal_timestamp_locked
@@ -487,17 +471,14 @@
dma_sync_sg_for_cpu dma_sync_sg_for_cpu
dma_sync_sg_for_device dma_sync_sg_for_device
dma_sync_single_for_cpu dma_sync_single_for_cpu
dma_sync_single_for_device
dma_unmap_page_attrs dma_unmap_page_attrs
dma_unmap_resource dma_unmap_resource
dma_unmap_sg_attrs dma_unmap_sg_attrs
do_exit do_exit
do_wait_intr_irq do_wait_intr_irq
down down
downgrade_write
down_interruptible down_interruptible
down_read down_read
down_read_trylock
down_timeout down_timeout
down_trylock down_trylock
down_write down_write
@@ -630,12 +611,15 @@
em_dev_register_perf_domain em_dev_register_perf_domain
enable_irq enable_irq
enable_percpu_irq enable_percpu_irq
ether_setup
eth_header eth_header
eth_header_cache eth_header_cache
eth_header_cache_update eth_header_cache_update
eth_header_parse eth_header_parse
eth_type_trans eth_mac_addr
eth_platform_get_mac_address
ethtool_op_get_link
ethtool_op_get_ts_info
eth_validate_addr
event_triggers_call event_triggers_call
extcon_get_edev_by_phandle extcon_get_edev_by_phandle
extcon_get_state extcon_get_state
@@ -682,13 +666,11 @@
fwnode_property_present fwnode_property_present
fwnode_property_read_string fwnode_property_read_string
fwnode_property_read_u32_array fwnode_property_read_u32_array
gcd
generic_file_llseek generic_file_llseek
generic_handle_irq generic_handle_irq
generic_iommu_put_resv_regions generic_iommu_put_resv_regions
genlmsg_put generic_mii_ioctl
genl_register_family genphy_resume
genl_unregister_family
gen_pool_add_owner gen_pool_add_owner
gen_pool_alloc_algo_owner gen_pool_alloc_algo_owner
gen_pool_avail gen_pool_avail
@@ -707,7 +689,6 @@
get_cpu_iowait_time_us get_cpu_iowait_time_us
get_device get_device
get_each_dmabuf get_each_dmabuf
get_freelist_nr_pages
__get_free_pages __get_free_pages
get_governor_parent_kobj get_governor_parent_kobj
get_kernel_pages get_kernel_pages
@@ -719,7 +700,6 @@
get_task_mm get_task_mm
get_unused_fd_flags get_unused_fd_flags
get_user_pages get_user_pages
get_user_pages_fast
get_user_pages_remote get_user_pages_remote
get_vaddr_frames get_vaddr_frames
get_zeroed_page get_zeroed_page
@@ -738,8 +718,8 @@
gpiod_direction_output gpiod_direction_output
gpiod_direction_output_raw gpiod_direction_output_raw
gpiod_get_raw_value gpiod_get_raw_value
gpiod_get_value_cansleep
gpiod_set_debounce gpiod_set_debounce
gpiod_set_raw_value
gpiod_set_value gpiod_set_value
gpiod_set_value_cansleep gpiod_set_value_cansleep
gpiod_to_irq gpiod_to_irq
@@ -752,13 +732,7 @@
handle_simple_irq handle_simple_irq
hashlen_string hashlen_string
have_governor_per_policy have_governor_per_policy
hci_alloc_dev
hci_free_dev
hci_recv_frame
hci_register_dev
hci_unregister_dev
hex_asc hex_asc
hex_dump_to_buffer
hrtimer_active hrtimer_active
hrtimer_cancel hrtimer_cancel
hrtimer_forward hrtimer_forward
@@ -833,7 +807,6 @@
input_set_abs_params input_set_abs_params
input_set_capability input_set_capability
input_unregister_device input_unregister_device
iomem_resource
iommu_alloc_resv_region iommu_alloc_resv_region
iommu_device_register iommu_device_register
iommu_device_sysfs_add iommu_device_sysfs_add
@@ -878,12 +851,10 @@
irq_set_parent irq_set_parent
irq_to_desc irq_to_desc
irq_work_queue irq_work_queue
irq_work_run
irq_work_sync irq_work_sync
is_dma_buf_file is_dma_buf_file
is_vmalloc_addr is_vmalloc_addr
iterate_fd iterate_fd
jiffies_64_to_clock_t
jiffies jiffies
jiffies_to_msecs jiffies_to_msecs
jiffies_to_usecs jiffies_to_usecs
@@ -900,7 +871,6 @@
__kfifo_alloc __kfifo_alloc
__kfifo_free __kfifo_free
__kfifo_in __kfifo_in
__kfifo_init
__kfifo_out __kfifo_out
__kfifo_to_user __kfifo_to_user
kfree kfree
@@ -920,7 +890,6 @@
kmem_cache_free kmem_cache_free
kobject_add kobject_add
kobject_create_and_add kobject_create_and_add
kobject_del
kobject_init kobject_init
kobject_init_and_add kobject_init_and_add
kobject_put kobject_put
@@ -932,7 +901,6 @@
kstrdup_const kstrdup_const
kstrndup kstrndup
kstrtobool kstrtobool
kstrtobool_from_user
kstrtoint kstrtoint
kstrtoint_from_user kstrtoint_from_user
kstrtol_from_user kstrtol_from_user
@@ -963,7 +931,6 @@
kthread_worker_fn kthread_worker_fn
ktime_get ktime_get
ktime_get_mono_fast_ns ktime_get_mono_fast_ns
ktime_get_raw
ktime_get_raw_ts64 ktime_get_raw_ts64
ktime_get_real_ts64 ktime_get_real_ts64
ktime_get_ts64 ktime_get_ts64
@@ -1006,6 +973,10 @@
mbox_free_channel mbox_free_channel
mbox_request_channel mbox_request_channel
mbox_send_message mbox_send_message
mdiobus_alloc_size
mdiobus_free
__mdiobus_register
mdiobus_unregister
media_create_intf_link media_create_intf_link
media_create_pad_link media_create_pad_link
media_device_cleanup media_device_cleanup
@@ -1024,7 +995,6 @@
memcpy memcpy
__memcpy_fromio __memcpy_fromio
__memcpy_toio __memcpy_toio
memdup_user
memmove memmove
memory_read_from_buffer memory_read_from_buffer
memparse memparse
@@ -1035,6 +1005,12 @@
memstart_addr memstart_addr
memunmap memunmap
migrate_swap migrate_swap
mii_check_media
mii_ethtool_get_link_ksettings
mii_ethtool_gset
mii_ethtool_set_link_ksettings
mii_link_ok
mii_nway_restart
mipi_dsi_attach mipi_dsi_attach
mipi_dsi_dcs_read mipi_dsi_dcs_read
mipi_dsi_dcs_write mipi_dsi_dcs_write
@@ -1065,13 +1041,11 @@
mmc_remove_host mmc_remove_host
mmc_request_done mmc_request_done
mmc_send_tuning mmc_send_tuning
__mmdrop
mmput mmput
mod_delayed_work_on mod_delayed_work_on
mod_timer mod_timer
mod_timer_pending mod_timer_pending
module_layout module_layout
module_put
__msecs_to_jiffies __msecs_to_jiffies
msleep msleep
msleep_interruptible msleep_interruptible
@@ -1090,6 +1064,9 @@
nd_tbl nd_tbl
netdev_alloc_frag netdev_alloc_frag
__netdev_alloc_skb __netdev_alloc_skb
netdev_err
netdev_info
netdev_warn
netif_carrier_off netif_carrier_off
netif_carrier_on netif_carrier_on
netif_napi_add netif_napi_add
@@ -1097,24 +1074,18 @@
netif_receive_skb_list netif_receive_skb_list
netif_rx netif_rx
netif_rx_ni netif_rx_ni
netif_tx_stop_all_queues
netif_tx_wake_queue netif_tx_wake_queue
__netlink_kernel_create __netlink_kernel_create
netlink_kernel_release
netlink_unicast netlink_unicast
net_namespace_list net_namespace_list
nf_register_net_hooks nf_register_net_hooks
nf_unregister_net_hooks nf_unregister_net_hooks
__nla_parse
nla_put
nla_put_nohdr
__nlmsg_put __nlmsg_put
no_llseek no_llseek
nonseekable_open nonseekable_open
nr_cpu_ids nr_cpu_ids
nsecs_to_jiffies nsecs_to_jiffies
ns_to_timespec64 ns_to_timespec64
n_tty_ioctl_helper
__num_online_cpus __num_online_cpus
nvmem_cell_get nvmem_cell_get
nvmem_cell_put nvmem_cell_put
@@ -1135,7 +1106,6 @@
of_clk_src_simple_get of_clk_src_simple_get
of_count_phandle_with_args of_count_phandle_with_args
of_cpu_node_to_id of_cpu_node_to_id
of_devfreq_cooling_register_power
of_device_get_match_data of_device_get_match_data
of_device_is_available of_device_is_available
of_device_is_compatible of_device_is_compatible
@@ -1204,7 +1174,6 @@
of_remove_property of_remove_property
of_reserved_mem_device_init_by_idx of_reserved_mem_device_init_by_idx
of_reserved_mem_lookup of_reserved_mem_lookup
of_root
of_thermal_get_trip_points of_thermal_get_trip_points
of_translate_address of_translate_address
on_each_cpu on_each_cpu
@@ -1214,17 +1183,14 @@
__page_pinner_migration_failed __page_pinner_migration_failed
panic panic
panic_notifier_list panic_notifier_list
param_array_ops
param_get_bool param_get_bool
param_get_charp param_get_charp
param_get_int param_get_int
param_get_uint param_get_uint
param_get_ulong param_get_ulong
param_ops_bool param_ops_bool
param_ops_byte
param_ops_charp param_ops_charp
param_ops_int param_ops_int
param_ops_string
param_ops_uint param_ops_uint
param_set_bool param_set_bool
param_set_charp param_set_charp
@@ -1238,20 +1204,28 @@
perf_event_enable perf_event_enable
perf_event_release_kernel perf_event_release_kernel
perf_event_update_userpage perf_event_update_userpage
perf_num_counters
perf_pmu_migrate_context perf_pmu_migrate_context
perf_pmu_register perf_pmu_register
perf_pmu_unregister perf_pmu_unregister
perf_trace_buf_alloc perf_trace_buf_alloc
perf_trace_run_bpf_submit perf_trace_run_bpf_submit
pfn_valid pfn_valid
phy_connect
phy_disconnect
phy_do_ioctl_running
phy_ethtool_get_link_ksettings
phy_ethtool_nway_reset
phy_ethtool_set_link_ksettings
phy_exit phy_exit
phy_get phy_get
phy_init phy_init
phy_power_off phy_power_off
phy_power_on phy_power_on
phy_print_status
phy_put phy_put
phy_set_mode_ext phy_set_mode_ext
phy_start
phy_stop
pid_task pid_task
pinconf_generic_parse_dt_config pinconf_generic_parse_dt_config
pinctrl_dev_get_drvdata pinctrl_dev_get_drvdata
@@ -1330,6 +1304,7 @@
proc_mkdir proc_mkdir
proc_remove proc_remove
proc_set_user proc_set_user
pskb_expand_head
put_device put_device
put_disk put_disk
__put_page __put_page
@@ -1372,8 +1347,6 @@
rb_first rb_first
rb_insert_color rb_insert_color
rb_next rb_next
rb_prev
rb_replace_node
rcu_idle_enter rcu_idle_enter
rcu_idle_exit rcu_idle_exit
__rcu_read_lock __rcu_read_lock
@@ -1391,12 +1364,9 @@
__register_chrdev __register_chrdev
register_chrdev_region register_chrdev_region
register_die_notifier register_die_notifier
register_inetaddr_notifier
register_kprobe register_kprobe
register_module_notifier register_module_notifier
register_netdev register_netdev
register_netdevice
register_netdevice_notifier
register_oom_notifier register_oom_notifier
register_pernet_subsys register_pernet_subsys
register_pm_notifier register_pm_notifier
@@ -1449,16 +1419,13 @@
regulator_sync_voltage regulator_sync_voltage
release_firmware release_firmware
release_pages release_pages
__release_region
remap_pfn_range remap_pfn_range
remap_vmalloc_range remap_vmalloc_range
remove_proc_entry remove_proc_entry
remove_proc_subtree remove_proc_subtree
remove_wait_queue remove_wait_queue
request_firmware request_firmware
request_firmware_nowait
__request_percpu_irq __request_percpu_irq
__request_region
request_threaded_irq request_threaded_irq
reset_control_assert reset_control_assert
reset_control_deassert reset_control_deassert
@@ -1487,9 +1454,6 @@
rtc_tm_to_time64 rtc_tm_to_time64
rtc_update_irq rtc_update_irq
rtc_valid_tm rtc_valid_tm
rtnl_is_locked
rtnl_lock
rtnl_unlock
runqueues runqueues
sched_clock sched_clock
sched_feat_keys sched_feat_keys
@@ -1507,26 +1471,7 @@
scnprintf scnprintf
scsi_device_quiesce scsi_device_quiesce
__scsi_iterate_devices __scsi_iterate_devices
sdio_claim_host
sdio_claim_irq
sdio_disable_func
sdio_enable_func
sdio_f0_readb
sdio_f0_writeb
sdio_get_host_pm_caps
sdio_readb
sdio_readl
sdio_readsb
sdio_register_driver
sdio_release_host
sdio_release_irq
sdio_set_block_size
sdio_set_host_pm_flags
sdio_signal_irq sdio_signal_irq
sdio_unregister_driver
sdio_writeb
sdio_writel
sdio_writesb
send_sig send_sig
seq_hex_dump seq_hex_dump
seq_lseek seq_lseek
@@ -1566,9 +1511,7 @@
sg_next sg_next
__sg_page_iter_next __sg_page_iter_next
__sg_page_iter_start __sg_page_iter_start
shmem_file_setup
si_mem_available si_mem_available
si_meminfo
simple_attr_open simple_attr_open
simple_attr_read simple_attr_read
simple_attr_release simple_attr_release
@@ -1579,17 +1522,15 @@
single_open single_open
single_release single_release
skb_add_rx_frag skb_add_rx_frag
skb_clone
skb_copy skb_copy
skb_dequeue skb_copy_expand
skb_pull skb_pull
skb_pull_rcsum
skb_push skb_push
skb_put skb_put
skb_queue_head
skb_queue_purge
skb_queue_tail skb_queue_tail
skb_realloc_headroom
skb_trim skb_trim
smp_call_function
smp_call_function_single smp_call_function_single
snd_card_add_dev_attr snd_card_add_dev_attr
snd_ctl_boolean_mono_info snd_ctl_boolean_mono_info
@@ -1611,9 +1552,13 @@
snd_soc_card_jack_new snd_soc_card_jack_new
snd_soc_component_exit_regmap snd_soc_component_exit_regmap
snd_soc_component_init_regmap snd_soc_component_init_regmap
snd_soc_component_read
snd_soc_component_update_bits
snd_soc_component_write
snd_soc_dai_set_sysclk snd_soc_dai_set_sysclk
snd_soc_dapm_add_routes snd_soc_dapm_add_routes
snd_soc_dapm_disable_pin snd_soc_dapm_disable_pin
snd_soc_dapm_enable_pin
snd_soc_dapm_get_enum_double snd_soc_dapm_get_enum_double
snd_soc_dapm_get_pin_switch snd_soc_dapm_get_pin_switch
snd_soc_dapm_get_volsw snd_soc_dapm_get_volsw
@@ -1623,6 +1568,7 @@
snd_soc_dapm_put_enum_double snd_soc_dapm_put_enum_double
snd_soc_dapm_put_pin_switch snd_soc_dapm_put_pin_switch
snd_soc_dapm_put_volsw snd_soc_dapm_put_volsw
snd_soc_dapm_sync
snd_soc_get_volsw snd_soc_get_volsw
snd_soc_info_enum_double snd_soc_info_enum_double
snd_soc_info_volsw snd_soc_info_volsw
@@ -1658,7 +1604,6 @@
spmi_register_write spmi_register_write
spmi_register_zero_write spmi_register_zero_write
sprintf sprintf
sprint_symbol_no_offset
srcu_init_notifier_head srcu_init_notifier_head
srcu_notifier_call_chain srcu_notifier_call_chain
srcu_notifier_chain_register srcu_notifier_chain_register
@@ -1669,6 +1614,7 @@
stack_trace_save stack_trace_save
static_key_slow_dec static_key_slow_dec
static_key_slow_inc static_key_slow_inc
stop_one_cpu_nowait
strcasecmp strcasecmp
strchr strchr
strcmp strcmp
@@ -1684,12 +1630,10 @@
strncpy_from_user strncpy_from_user
strnlen strnlen
strnstr strnstr
strpbrk
strrchr strrchr
strreplace strreplace
strscpy strscpy
strsep strsep
strspn
strstr strstr
suspend_set_ops suspend_set_ops
__sw_hweight32 __sw_hweight32
@@ -1716,7 +1660,6 @@
system_freezable_power_efficient_wq system_freezable_power_efficient_wq
system_freezing_cnt system_freezing_cnt
system_highpri_wq system_highpri_wq
system_long_wq
system_power_efficient_wq system_power_efficient_wq
system_state system_state
system_unbound_wq system_unbound_wq
@@ -1733,7 +1676,6 @@
__task_rq_lock __task_rq_lock
thermal_cooling_device_unregister thermal_cooling_device_unregister
thermal_of_cooling_device_register thermal_of_cooling_device_register
thermal_zone_device_update
thermal_zone_get_temp thermal_zone_get_temp
thermal_zone_get_zone_by_name thermal_zone_get_zone_by_name
tick_nohz_get_idle_calls_cpu tick_nohz_get_idle_calls_cpu
@@ -1771,6 +1713,7 @@
__traceiter_android_vh_binder_restore_priority __traceiter_android_vh_binder_restore_priority
__traceiter_android_vh_binder_set_priority __traceiter_android_vh_binder_set_priority
__traceiter_android_vh_binder_transaction_init __traceiter_android_vh_binder_transaction_init
__traceiter_android_vh_cgroup_attach
__traceiter_android_vh_cgroup_set_task __traceiter_android_vh_cgroup_set_task
__traceiter_android_vh_commit_creds __traceiter_android_vh_commit_creds
__traceiter_android_vh_em_cpu_energy __traceiter_android_vh_em_cpu_energy
@@ -1778,6 +1721,7 @@
__traceiter_android_vh_finish_update_load_avg_se __traceiter_android_vh_finish_update_load_avg_se
__traceiter_android_vh_iommu_alloc_iova __traceiter_android_vh_iommu_alloc_iova
__traceiter_android_vh_iommu_free_iova __traceiter_android_vh_iommu_free_iova
__traceiter_android_vh_is_fpsimd_save
__traceiter_android_vh_logbuf __traceiter_android_vh_logbuf
__traceiter_android_vh_override_creds __traceiter_android_vh_override_creds
__traceiter_android_vh_prepare_update_load_avg_se __traceiter_android_vh_prepare_update_load_avg_se
@@ -1800,13 +1744,12 @@
__traceiter_android_vh_set_wake_flags __traceiter_android_vh_set_wake_flags
__traceiter_android_vh_syscall_prctl_finished __traceiter_android_vh_syscall_prctl_finished
__traceiter_cpu_frequency __traceiter_cpu_frequency
__traceiter_gpu_mem_total
__traceiter_pelt_se_tp __traceiter_pelt_se_tp
__traceiter_rwmmio_post_read __traceiter_rwmmio_post_read
__traceiter_rwmmio_read __traceiter_rwmmio_read
__traceiter_rwmmio_write __traceiter_rwmmio_write
__traceiter_sched_update_nr_running_tp __traceiter_sched_update_nr_running_tp
trace_output_call __traceiter_task_newtask
__tracepoint_android_rvh_cpu_overutilized __tracepoint_android_rvh_cpu_overutilized
__tracepoint_android_rvh_dequeue_task __tracepoint_android_rvh_dequeue_task
__tracepoint_android_rvh_dequeue_task_fair __tracepoint_android_rvh_dequeue_task_fair
@@ -1828,6 +1771,7 @@
__tracepoint_android_vh_binder_restore_priority __tracepoint_android_vh_binder_restore_priority
__tracepoint_android_vh_binder_set_priority __tracepoint_android_vh_binder_set_priority
__tracepoint_android_vh_binder_transaction_init __tracepoint_android_vh_binder_transaction_init
__tracepoint_android_vh_cgroup_attach
__tracepoint_android_vh_cgroup_set_task __tracepoint_android_vh_cgroup_set_task
__tracepoint_android_vh_commit_creds __tracepoint_android_vh_commit_creds
__tracepoint_android_vh_em_cpu_energy __tracepoint_android_vh_em_cpu_energy
@@ -1835,6 +1779,7 @@
__tracepoint_android_vh_finish_update_load_avg_se __tracepoint_android_vh_finish_update_load_avg_se
__tracepoint_android_vh_iommu_alloc_iova __tracepoint_android_vh_iommu_alloc_iova
__tracepoint_android_vh_iommu_free_iova __tracepoint_android_vh_iommu_free_iova
__tracepoint_android_vh_is_fpsimd_save
__tracepoint_android_vh_logbuf __tracepoint_android_vh_logbuf
__tracepoint_android_vh_override_creds __tracepoint_android_vh_override_creds
__tracepoint_android_vh_prepare_update_load_avg_se __tracepoint_android_vh_prepare_update_load_avg_se
@@ -1857,7 +1802,6 @@
__tracepoint_android_vh_set_wake_flags __tracepoint_android_vh_set_wake_flags
__tracepoint_android_vh_syscall_prctl_finished __tracepoint_android_vh_syscall_prctl_finished
__tracepoint_cpu_frequency __tracepoint_cpu_frequency
__tracepoint_gpu_mem_total
__tracepoint_pelt_se_tp __tracepoint_pelt_se_tp
tracepoint_probe_register tracepoint_probe_register
tracepoint_probe_unregister tracepoint_probe_unregister
@@ -1866,23 +1810,19 @@
__tracepoint_rwmmio_write __tracepoint_rwmmio_write
__tracepoint_sched_update_nr_running_tp __tracepoint_sched_update_nr_running_tp
tracepoint_srcu tracepoint_srcu
__tracepoint_task_newtask
trace_print_array_seq trace_print_array_seq
trace_print_flags_seq
trace_print_symbols_seq trace_print_symbols_seq
__trace_puts __trace_puts
trace_raw_output_prep trace_raw_output_prep
trace_seq_printf trace_seq_printf
trace_seq_putc trace_seq_putc
tracing_off tracing_off
try_module_get
try_wait_for_completion try_wait_for_completion
tty_driver_flush_buffer
tty_flip_buffer_push tty_flip_buffer_push
tty_insert_flip_string_fixed_flag tty_insert_flip_string_fixed_flag
tty_register_ldisc
tty_termios_baud_rate tty_termios_baud_rate
tty_termios_encode_baud_rate tty_termios_encode_baud_rate
tty_unregister_ldisc
typec_get_drvdata typec_get_drvdata
typec_mux_get_drvdata typec_mux_get_drvdata
typec_mux_register typec_mux_register
@@ -1921,30 +1861,25 @@
ufshcd_pltfrm_runtime_idle ufshcd_pltfrm_runtime_idle
ufshcd_pltfrm_runtime_resume ufshcd_pltfrm_runtime_resume
ufshcd_pltfrm_runtime_suspend ufshcd_pltfrm_runtime_suspend
ufshcd_pltfrm_shutdown
ufshcd_pltfrm_suspend ufshcd_pltfrm_suspend
ufshcd_remove ufshcd_remove
ufshcd_shutdown
ufshcd_uic_hibern8_exit ufshcd_uic_hibern8_exit
unlock_page unlock_page
unmap_mapping_range
unpin_user_pages unpin_user_pages
unregister_blkdev unregister_blkdev
__unregister_chrdev __unregister_chrdev
unregister_chrdev_region unregister_chrdev_region
unregister_die_notifier unregister_die_notifier
unregister_inetaddr_notifier
unregister_kprobe unregister_kprobe
unregister_module_notifier unregister_module_notifier
unregister_netdev unregister_netdev
unregister_netdevice_notifier
unregister_netdevice_queue
unregister_oom_notifier unregister_oom_notifier
unregister_pernet_subsys unregister_pernet_subsys
unregister_pm_notifier unregister_pm_notifier
unregister_reboot_notifier unregister_reboot_notifier
unregister_rpmsg_driver unregister_rpmsg_driver
unregister_shrinker unregister_shrinker
unregister_syscore_ops
unregister_virtio_device unregister_virtio_device
unregister_virtio_driver unregister_virtio_driver
up up
@@ -1960,6 +1895,7 @@
usb_create_shared_hcd usb_create_shared_hcd
usb_debug_root usb_debug_root
usb_del_gadget_udc usb_del_gadget_udc
usb_deregister
usb_disabled usb_disabled
usb_ep_alloc_request usb_ep_alloc_request
usb_ep_autoconfig usb_ep_autoconfig
@@ -1981,8 +1917,36 @@
usb_hcd_is_primary_hcd usb_hcd_is_primary_hcd
usb_hcd_poll_rh_status usb_hcd_poll_rh_status
usb_interface_id usb_interface_id
usbnet_change_mtu
usbnet_disconnect
usbnet_get_drvinfo
usbnet_get_endpoints
usbnet_get_link
usbnet_get_link_ksettings
usbnet_get_msglevel
usbnet_get_stats64
usbnet_link_change
usbnet_nway_reset
usbnet_open
usbnet_probe
usbnet_read_cmd
usbnet_read_cmd_nopm
usbnet_resume
usbnet_set_link_ksettings
usbnet_set_msglevel
usbnet_skb_return
usbnet_start_xmit
usbnet_stop
usbnet_suspend
usbnet_tx_timeout
usbnet_unlink_rx_urbs
usbnet_update_max_qlen
usbnet_write_cmd
usbnet_write_cmd_async
usbnet_write_cmd_nopm
usb_put_function_instance usb_put_function_instance
usb_put_hcd usb_put_hcd
usb_register_driver
usb_remove_hcd usb_remove_hcd
usb_role_switch_get usb_role_switch_get
usb_role_switch_get_drvdata usb_role_switch_get_drvdata
@@ -2112,7 +2076,6 @@
vmalloc_user vmalloc_user
vmap vmap
vm_event_states vm_event_states
vmf_insert_pfn_prot
vm_map_ram vm_map_ram
vm_node_stat vm_node_stat
vm_unmap_ram vm_unmap_ram
@@ -2129,7 +2092,6 @@
wait_for_completion_interruptible wait_for_completion_interruptible
wait_for_completion_interruptible_timeout wait_for_completion_interruptible_timeout
wait_for_completion_killable wait_for_completion_killable
wait_for_completion_killable_timeout
wait_for_completion_timeout wait_for_completion_timeout
wait_woken wait_woken
__wake_up __wake_up
@@ -2143,11 +2105,10 @@
__warn_printk __warn_printk
watchdog_init_timeout watchdog_init_timeout
watchdog_set_restart_priority watchdog_set_restart_priority
wireless_send_event
woken_wake_function woken_wake_function
work_busy work_busy
work_on_cpu work_on_cpu
ww_mutex_lock ww_mutex_lock_interruptible
ww_mutex_unlock ww_mutex_unlock
xhci_add_endpoint xhci_add_endpoint
xhci_check_bandwidth xhci_check_bandwidth
@@ -2157,19 +2118,175 @@
xhci_get_ep_ctx xhci_get_ep_ctx
xhci_init_driver xhci_init_driver
xhci_reset_bandwidth xhci_reset_bandwidth
# preserved by --additions-only
alloc_netdev_mqs
all_vm_events
__arch_clear_user
bio_add_pc_page
bio_reset
__bitmap_equal
__bitmap_or
blk_insert_cloned_request
blk_mq_sched_mark_restart_hctx
blk_rq_append_bio
cache_line_size
class_create_file_ns
class_remove_file_ns
clear_page
cpu_pm_register_notifier
cpu_pm_unregister_notifier
debugfs_create_u8
debug_locks_off
devfreq_add_device
devfreq_cooling_unregister
devfreq_register_opp_notifier
devfreq_unregister_opp_notifier
dev_get_by_name
devm_of_pwm_get
devm_pinctrl_put
devm_rc_allocate_device
devm_rc_register_device
dev_pm_opp_find_freq_exact
dev_pm_opp_put_regulators
dev_pm_opp_set_regulators
dma_buf_mmap
dma_fence_get_status
dma_fence_remove_callback
dma_sync_single_for_device
downgrade_write
down_read_trylock
ether_setup
eth_type_trans
fsg_common_create_luns
fsg_common_set_cdev
fsg_common_set_inquiry_string
fsg_common_set_sysfs
fsg_config_from_params
gcd
genlmsg_put
genl_register_family
genl_unregister_family
get_freelist_nr_pages
get_user_pages_fast
gpiod_set_raw_value
hci_alloc_dev
hci_free_dev
hci_recv_frame
hci_register_dev
hci_unregister_dev
hex_dump_to_buffer
iomem_resource
irq_work_run
jiffies_64_to_clock_t
__kfifo_init
kobject_del
kstrtobool_from_user
ktime_get_raw
led_classdev_unregister
memdup_user
__mmdrop
module_put
netif_tx_stop_all_queues
netlink_kernel_release
__nla_parse
nla_put
nla_put_nohdr
n_tty_ioctl_helper
of_devfreq_cooling_register_power
of_root
param_array_ops
param_ops_byte
param_ops_string
perf_num_counters
pin_user_pages_remote
rb_prev
rb_replace_node
register_inetaddr_notifier
register_netdevice
register_netdevice_notifier
__release_region
request_firmware_nowait
__request_region
rtnl_is_locked
rtnl_lock
rtnl_unlock
__sbitmap_queue_get
sdio_claim_host
sdio_claim_irq
sdio_disable_func
sdio_enable_func
sdio_f0_readb
sdio_f0_writeb
sdio_get_host_pm_caps
sdio_readb
sdio_readl
sdio_readsb
sdio_register_driver
sdio_release_host
sdio_release_irq
sdio_set_block_size
sdio_set_host_pm_flags
sdio_unregister_driver
sdio_writeb
sdio_writel
sdio_writesb
send_sig_info
shmem_file_setup
si_meminfo
skb_dequeue
skb_pull_rcsum
skb_queue_head
skb_queue_purge
skb_realloc_headroom
snd_soc_component_test_bits
sprint_symbol_no_offset
stpcpy
strim
strpbrk
strspn
syscore_resume
syscore_suspend
system_long_wq
thermal_zone_device_update
__traceiter_gpu_mem_total
trace_output_call
__tracepoint_android_vh_ufs_update_sdev
__tracepoint_gpu_mem_total
trace_print_flags_seq
try_module_get
tty_driver_flush_buffer
tty_register_ldisc
tty_unregister_ldisc
ufshcd_pltfrm_shutdown
unmap_mapping_range
unpin_user_page
unregister_inetaddr_notifier
unregister_netdevice_notifier
unregister_netdevice_queue
unregister_syscore_ops
usb_add_config
usb_composite_probe
usb_composite_unregister
usb_gadget_connect
usb_gadget_disconnect
usb_gadget_probe_driver
usb_gadget_set_selfpowered
usb_get_function
usb_get_function_instance
usb_put_function
usb_remove_function
v4l2_m2m_buf_copy_metadata
v4l2_m2m_buf_remove_by_buf
v4l2_m2m_register_media_controller
v4l2_m2m_request_queue
v4l2_m2m_unregister_media_controller
vmf_insert_pfn_prot
wait_for_completion_killable_timeout
wireless_send_event
ww_mutex_lock
zlib_deflate zlib_deflate
zlib_deflateEnd zlib_deflateEnd
zlib_deflateInit2 zlib_deflateInit2
zlib_deflateReset zlib_deflateReset
zlib_deflate_workspacesize zlib_deflate_workspacesize
# preserved by --additions-only
debugfs_create_u8
devm_of_pwm_get
led_classdev_unregister
pin_user_pages_remote
send_sig_info
syscore_resume
syscore_suspend
unpin_user_page
v4l2_m2m_buf_remove_by_buf

View File

@@ -24,6 +24,7 @@
alloc_netdev_mqs alloc_netdev_mqs
__alloc_pages_nodemask __alloc_pages_nodemask
__alloc_percpu __alloc_percpu
__alloc_percpu_gfp
__alloc_skb __alloc_skb
alloc_skb_with_frags alloc_skb_with_frags
alloc_workqueue alloc_workqueue
@@ -34,6 +35,8 @@
android_debug_symbol android_debug_symbol
android_rvh_probe_register android_rvh_probe_register
anon_inode_getfile anon_inode_getfile
arc4_crypt
arc4_setkey
__arch_clear_user __arch_clear_user
__arch_copy_from_user __arch_copy_from_user
__arch_copy_in_user __arch_copy_in_user
@@ -263,8 +266,11 @@
cpus_read_unlock cpus_read_unlock
cpu_subsys cpu_subsys
cpu_topology cpu_topology
crc32_be
crc32_le
crc8 crc8
crc8_populate_msb crc8_populate_msb
crypto_aead_decrypt
crypto_aead_encrypt crypto_aead_encrypt
crypto_aead_setauthsize crypto_aead_setauthsize
crypto_aead_setkey crypto_aead_setkey
@@ -285,6 +291,7 @@
crypto_enqueue_request crypto_enqueue_request
crypto_has_alg crypto_has_alg
crypto_init_queue crypto_init_queue
__crypto_memneq
crypto_register_aead crypto_register_aead
crypto_register_ahash crypto_register_ahash
crypto_register_alg crypto_register_alg
@@ -292,7 +299,9 @@
crypto_register_rngs crypto_register_rngs
crypto_register_scomp crypto_register_scomp
crypto_register_skcipher crypto_register_skcipher
crypto_shash_digest
crypto_shash_final crypto_shash_final
crypto_shash_finup
crypto_shash_setkey crypto_shash_setkey
crypto_shash_update crypto_shash_update
crypto_skcipher_decrypt crypto_skcipher_decrypt
@@ -305,6 +314,7 @@
crypto_unregister_rngs crypto_unregister_rngs
crypto_unregister_scomp crypto_unregister_scomp
crypto_unregister_skcipher crypto_unregister_skcipher
__crypto_xor
css_next_child css_next_child
csum_ipv6_magic csum_ipv6_magic
csum_partial csum_partial
@@ -335,6 +345,7 @@
debugfs_lookup debugfs_lookup
debugfs_print_regs32 debugfs_print_regs32
debugfs_remove debugfs_remove
debugfs_rename
dec_zone_page_state dec_zone_page_state
default_llseek default_llseek
deferred_free deferred_free
@@ -345,6 +356,8 @@
desc_to_gpio desc_to_gpio
destroy_workqueue destroy_workqueue
dev_alloc_name dev_alloc_name
dev_change_net_namespace
dev_close
dev_coredumpv dev_coredumpv
_dev_crit _dev_crit
__dev_direct_xmit __dev_direct_xmit
@@ -352,6 +365,7 @@
_dev_emerg _dev_emerg
_dev_err _dev_err
dev_err_probe dev_err_probe
dev_fetch_sw_netstats
devfreq_add_device devfreq_add_device
devfreq_add_governor devfreq_add_governor
devfreq_cooling_unregister devfreq_cooling_unregister
@@ -391,6 +405,7 @@
device_property_read_u8_array device_property_read_u8_array
device_register device_register
device_remove_file device_remove_file
device_rename
device_set_wakeup_capable device_set_wakeup_capable
device_show_int device_show_int
device_store_int device_store_int
@@ -849,6 +864,7 @@
enable_percpu_irq enable_percpu_irq
ether_setup ether_setup
eth_mac_addr eth_mac_addr
ethtool_op_get_link
eth_type_trans eth_type_trans
eventfd_ctx_fdget eventfd_ctx_fdget
eventfd_ctx_fileget eventfd_ctx_fileget
@@ -865,6 +881,7 @@
extcon_register_notifier extcon_register_notifier
extcon_set_state_sync extcon_set_state_sync
extcon_unregister_notifier extcon_unregister_notifier
failure_tracking
fasync_helper fasync_helper
__fdget __fdget
fd_install fd_install
@@ -915,6 +932,7 @@
generic_file_llseek generic_file_llseek
generic_handle_irq generic_handle_irq
generic_iommu_put_resv_regions generic_iommu_put_resv_regions
genlmsg_multicast_allns
genlmsg_put genlmsg_put
genl_register_family genl_register_family
genl_unregister_family genl_unregister_family
@@ -937,6 +955,8 @@
get_each_object_track get_each_object_track
__get_free_pages __get_free_pages
get_governor_parent_kobj get_governor_parent_kobj
get_net_ns_by_fd
get_net_ns_by_pid
get_option get_option
get_page_owner_handle get_page_owner_handle
get_pfnblock_flags_mask get_pfnblock_flags_mask
@@ -1013,6 +1033,9 @@
hvc_kick hvc_kick
hvc_poll hvc_poll
hvc_remove hvc_remove
__hw_addr_init
__hw_addr_sync
__hw_addr_unsync
hwrng_register hwrng_register
hwrng_unregister hwrng_unregister
hwspin_lock_free hwspin_lock_free
@@ -1061,6 +1084,7 @@
inc_node_page_state inc_node_page_state
inc_zone_page_state inc_zone_page_state
in_egroup_p in_egroup_p
inet_csk_get_port
inet_proto_csum_replace4 inet_proto_csum_replace4
init_dummy_netdev init_dummy_netdev
init_iova_domain init_iova_domain
@@ -1210,6 +1234,8 @@
kernel_connect kernel_connect
kernel_getsockname kernel_getsockname
kernel_kobj kernel_kobj
kernel_param_lock
kernel_param_unlock
kernel_power_off kernel_power_off
kernel_recvmsg kernel_recvmsg
kernel_restart kernel_restart
@@ -1219,6 +1245,9 @@
kernfs_put kernfs_put
kern_mount kern_mount
kern_unmount kern_unmount
key_create_or_update
key_put
keyring_alloc
__kfifo_alloc __kfifo_alloc
__kfifo_free __kfifo_free
__kfifo_in __kfifo_in
@@ -1301,6 +1330,7 @@
kthread_unpark kthread_unpark
kthread_worker_fn kthread_worker_fn
ktime_get ktime_get
ktime_get_coarse_with_offset
ktime_get_mono_fast_ns ktime_get_mono_fast_ns
ktime_get_real_seconds ktime_get_real_seconds
ktime_get_real_ts64 ktime_get_real_ts64
@@ -1390,6 +1420,7 @@
mmc_send_tuning mmc_send_tuning
mmput mmput
mod_delayed_work_on mod_delayed_work_on
__mod_node_page_state
mod_node_page_state mod_node_page_state
mod_timer mod_timer
__module_get __module_get
@@ -1416,8 +1447,11 @@
neigh_lookup neigh_lookup
neigh_xmit neigh_xmit
__netdev_alloc_skb __netdev_alloc_skb
netdev_err
netdev_info
netdev_rx_handler_register netdev_rx_handler_register
netdev_rx_handler_unregister netdev_rx_handler_unregister
netdev_set_default_ethtool_ops
netdev_update_features netdev_update_features
netif_carrier_off netif_carrier_off
netif_carrier_on netif_carrier_on
@@ -1426,6 +1460,7 @@
netif_napi_add netif_napi_add
__netif_napi_del __netif_napi_del
netif_receive_skb netif_receive_skb
netif_receive_skb_core
netif_receive_skb_list netif_receive_skb_list
netif_rx netif_rx
netif_rx_ni netif_rx_ni
@@ -1436,7 +1471,11 @@
netlink_capable netlink_capable
__netlink_kernel_create __netlink_kernel_create
netlink_kernel_release netlink_kernel_release
netlink_register_notifier
netlink_unicast netlink_unicast
netlink_unregister_notifier
net_ns_type_operations
net_ratelimit
__next_zones_zonelist __next_zones_zonelist
nla_find nla_find
nla_memcpy nla_memcpy
@@ -1752,6 +1791,7 @@
power_supply_set_property power_supply_set_property
power_supply_unregister power_supply_unregister
power_supply_unreg_notifier power_supply_unreg_notifier
prandom_bytes
prandom_u32 prandom_u32
preempt_schedule preempt_schedule
preempt_schedule_notrace preempt_schedule_notrace
@@ -1777,6 +1817,7 @@
put_device put_device
put_disk put_disk
put_iova_domain put_iova_domain
__put_net
__put_page __put_page
put_pid put_pid
put_sg_io_hdr put_sg_io_hdr
@@ -1860,6 +1901,7 @@
rcuwait_wake_up rcuwait_wake_up
rdev_get_drvdata rdev_get_drvdata
reboot_mode reboot_mode
reclaim_shmem_address_space
refcount_dec_and_lock refcount_dec_and_lock
refcount_dec_not_one refcount_dec_not_one
refcount_warn_saturate refcount_warn_saturate
@@ -1884,6 +1926,7 @@
register_netdevice_notifier register_netdevice_notifier
register_netevent_notifier register_netevent_notifier
register_oom_notifier register_oom_notifier
register_pernet_device
register_pm_notifier register_pm_notifier
register_reboot_notifier register_reboot_notifier
register_restart_handler register_restart_handler
@@ -1952,10 +1995,20 @@
return_address return_address
revalidate_disk_size revalidate_disk_size
rfkill_alloc rfkill_alloc
rfkill_blocked
rfkill_destroy rfkill_destroy
rfkill_init_sw_state rfkill_init_sw_state
rfkill_pause_polling
rfkill_register rfkill_register
rfkill_resume_polling
rfkill_set_hw_state
rfkill_unregister rfkill_unregister
rhashtable_free_and_destroy
rhashtable_insert_slow
rhltable_init
__rht_bucket_nested
rht_bucket_nested
rht_bucket_nested_insert
rndis_deregister rndis_deregister
rndis_free_response rndis_free_response
rndis_get_next_response rndis_get_next_response
@@ -1968,7 +2021,9 @@
rndis_signal_connect rndis_signal_connect
rndis_uninit rndis_uninit
root_task_group root_task_group
round_jiffies
round_jiffies_relative round_jiffies_relative
round_jiffies_up
rpmsg_get_signals rpmsg_get_signals
rpmsg_poll rpmsg_poll
rpmsg_register_device rpmsg_register_device
@@ -2122,8 +2177,11 @@
skb_add_rx_frag skb_add_rx_frag
skb_append_pagefrags skb_append_pagefrags
skb_checksum skb_checksum
skb_checksum_help
skb_clone skb_clone
skb_clone_sk
skb_coalesce_rx_frag skb_coalesce_rx_frag
skb_complete_wifi_ack
skb_copy skb_copy
skb_copy_bits skb_copy_bits
skb_copy_datagram_iter skb_copy_datagram_iter
@@ -2214,6 +2272,7 @@
soc_device_register soc_device_register
soc_device_unregister soc_device_unregister
sock_alloc_send_skb sock_alloc_send_skb
__sock_create
sock_create_kern sock_create_kern
sock_gettstamp sock_gettstamp
sock_init_data sock_init_data
@@ -2292,6 +2351,7 @@
strscpy strscpy
strsep strsep
strstr strstr
__sw_hweight16
__sw_hweight32 __sw_hweight32
__sw_hweight64 __sw_hweight64
__sw_hweight8 __sw_hweight8
@@ -2468,6 +2528,7 @@
__traceiter_android_vh_show_suspend_epoch_val __traceiter_android_vh_show_suspend_epoch_val
__traceiter_android_vh_timer_calc_index __traceiter_android_vh_timer_calc_index
__traceiter_android_vh_ufs_check_int_errors __traceiter_android_vh_ufs_check_int_errors
__traceiter_android_vh_ufs_clock_scaling
__traceiter_android_vh_ufs_compl_command __traceiter_android_vh_ufs_compl_command
__traceiter_android_vh_ufs_fill_prdt __traceiter_android_vh_ufs_fill_prdt
__traceiter_android_vh_ufs_prepare_command __traceiter_android_vh_ufs_prepare_command
@@ -2575,11 +2636,13 @@
__tracepoint_android_vh_psi_group __tracepoint_android_vh_psi_group
__tracepoint_android_vh_rproc_recovery __tracepoint_android_vh_rproc_recovery
__tracepoint_android_vh_scheduler_tick __tracepoint_android_vh_scheduler_tick
__tracepoint_android_vh_shmem_alloc_page
__tracepoint_android_vh_show_max_freq __tracepoint_android_vh_show_max_freq
__tracepoint_android_vh_show_resume_epoch_val __tracepoint_android_vh_show_resume_epoch_val
__tracepoint_android_vh_show_suspend_epoch_val __tracepoint_android_vh_show_suspend_epoch_val
__tracepoint_android_vh_timer_calc_index __tracepoint_android_vh_timer_calc_index
__tracepoint_android_vh_ufs_check_int_errors __tracepoint_android_vh_ufs_check_int_errors
__tracepoint_android_vh_ufs_clock_scaling
__tracepoint_android_vh_ufs_compl_command __tracepoint_android_vh_ufs_compl_command
__tracepoint_android_vh_ufs_fill_prdt __tracepoint_android_vh_ufs_fill_prdt
__tracepoint_android_vh_ufs_prepare_command __tracepoint_android_vh_ufs_prepare_command
@@ -2700,6 +2763,7 @@
unregister_netdevice_queue unregister_netdevice_queue
unregister_netevent_notifier unregister_netevent_notifier
unregister_oom_notifier unregister_oom_notifier
unregister_pernet_device
unregister_pm_notifier unregister_pm_notifier
unregister_reboot_notifier unregister_reboot_notifier
unregister_restart_handler unregister_restart_handler
@@ -2844,6 +2908,7 @@
vchan_init vchan_init
vchan_tx_desc_free vchan_tx_desc_free
vchan_tx_submit vchan_tx_submit
verify_pkcs7_signature
vfree vfree
video_devdata video_devdata
video_device_alloc video_device_alloc
@@ -2888,6 +2953,7 @@
wakeup_source_register wakeup_source_register
wakeup_source_unregister wakeup_source_unregister
__warn_printk __warn_printk
wireless_nlevent_flush
wireless_send_event wireless_send_event
woken_wake_function woken_wake_function
work_busy work_busy

View File

@@ -41,7 +41,9 @@
available_idle_cpu available_idle_cpu
bdget_disk bdget_disk
bdput bdput
bio_add_pc_page
bio_endio bio_endio
bio_reset
bitmap_allocate_region bitmap_allocate_region
__bitmap_clear __bitmap_clear
bitmap_find_next_zero_area_off bitmap_find_next_zero_area_off
@@ -51,11 +53,16 @@
bitmap_release_region bitmap_release_region
__bitmap_set __bitmap_set
blk_alloc_queue blk_alloc_queue
blk_bio_list_merge
blk_cleanup_queue blk_cleanup_queue
blk_execute_rq blk_execute_rq
blk_execute_rq_nowait blk_execute_rq_nowait
blk_get_request blk_get_request
blk_mq_debugfs_rq_show
blk_mq_rq_cpu blk_mq_rq_cpu
blk_mq_run_hw_queue
blk_mq_sched_mark_restart_hctx
blk_mq_sched_request_inserted
blk_put_request blk_put_request
blk_queue_flag_clear blk_queue_flag_clear
blk_queue_flag_set blk_queue_flag_set
@@ -65,17 +72,19 @@
blk_queue_max_discard_sectors blk_queue_max_discard_sectors
blk_queue_max_write_zeroes_sectors blk_queue_max_write_zeroes_sectors
blk_queue_physical_block_size blk_queue_physical_block_size
blk_rq_append_bio
blk_rq_map_kern blk_rq_map_kern
blk_rq_map_user blk_rq_map_user
blk_rq_map_user_iov blk_rq_map_user_iov
blk_rq_unmap_user blk_rq_unmap_user
blk_stat_enable_accounting
blk_verify_command blk_verify_command
blocking_notifier_call_chain blocking_notifier_call_chain
blocking_notifier_chain_register blocking_notifier_chain_register
blocking_notifier_chain_unregister blocking_notifier_chain_unregister
bpf_trace_run1
bpf_trace_run10 bpf_trace_run10
bpf_trace_run12 bpf_trace_run12
bpf_trace_run1
bpf_trace_run2 bpf_trace_run2
bpf_trace_run3 bpf_trace_run3
bpf_trace_run4 bpf_trace_run4
@@ -494,6 +503,9 @@
edac_device_free_ctl_info edac_device_free_ctl_info
edac_device_handle_ce_count edac_device_handle_ce_count
edac_device_handle_ue_count edac_device_handle_ue_count
elevator_alloc
elv_register
elv_unregister
enable_irq enable_irq
enable_percpu_irq enable_percpu_irq
eventfd_ctx_fdget eventfd_ctx_fdget
@@ -922,8 +934,8 @@
mempool_free mempool_free
mempool_free_slab mempool_free_slab
memremap memremap
memset64
memset memset
memset64
__memset_io __memset_io
memstart_addr memstart_addr
memunmap memunmap
@@ -959,8 +971,8 @@
__next_zones_zonelist __next_zones_zonelist
nla_find nla_find
nla_put nla_put
nla_reserve_64bit
nla_reserve nla_reserve
nla_reserve_64bit
__nla_validate __nla_validate
__nlmsg_put __nlmsg_put
no_llseek no_llseek
@@ -1399,6 +1411,16 @@
rtc_update_irq rtc_update_irq
rtc_valid_tm rtc_valid_tm
runqueues runqueues
sbitmap_add_wait_queue
sbitmap_any_bit_set
sbitmap_del_wait_queue
sbitmap_init_node
sbitmap_queue_clear
__sbitmap_queue_get
sbitmap_queue_init_node
sbitmap_queue_min_shallow_depth
sbitmap_queue_resize
sbitmap_queue_show
sched_clock sched_clock
sched_feat_keys sched_feat_keys
sched_feat_names sched_feat_names
@@ -1444,6 +1466,8 @@
sdhci_set_power_noreg sdhci_set_power_noreg
sdhci_setup_host sdhci_setup_host
seq_buf_printf seq_buf_printf
seq_list_next
seq_list_start
seq_lseek seq_lseek
seq_open seq_open
seq_printf seq_printf
@@ -1548,6 +1572,7 @@
sscanf sscanf
__stack_chk_fail __stack_chk_fail
__stack_chk_guard __stack_chk_guard
stack_trace_save_tsk
static_key_disable static_key_disable
stop_machine stop_machine
stop_one_cpu_nowait stop_one_cpu_nowait
@@ -1629,6 +1654,7 @@
thermal_zone_of_sensor_unregister thermal_zone_of_sensor_unregister
tick_nohz_get_sleep_length tick_nohz_get_sleep_length
time64_to_tm time64_to_tm
timer_reduce
topology_set_thermal_pressure topology_set_thermal_pressure
total_swapcache_pages total_swapcache_pages
trace_array_get_by_name trace_array_get_by_name
@@ -1701,6 +1727,7 @@
__traceiter_android_vh_ufs_check_int_errors __traceiter_android_vh_ufs_check_int_errors
__traceiter_android_vh_ufs_compl_command __traceiter_android_vh_ufs_compl_command
__traceiter_android_vh_ufs_send_command __traceiter_android_vh_ufs_send_command
__traceiter_android_vh_ufs_update_sdev
__traceiter_binder_transaction_received __traceiter_binder_transaction_received
__traceiter_cpu_frequency_limits __traceiter_cpu_frequency_limits
__traceiter_cpu_idle __traceiter_cpu_idle
@@ -1771,6 +1798,7 @@
__tracepoint_android_vh_ufs_check_int_errors __tracepoint_android_vh_ufs_check_int_errors
__tracepoint_android_vh_ufs_compl_command __tracepoint_android_vh_ufs_compl_command
__tracepoint_android_vh_ufs_send_command __tracepoint_android_vh_ufs_send_command
__tracepoint_android_vh_ufs_update_sdev
__tracepoint_binder_transaction_received __tracepoint_binder_transaction_received
__tracepoint_cpu_frequency_limits __tracepoint_cpu_frequency_limits
__tracepoint_cpu_idle __tracepoint_cpu_idle

View File

@@ -60,7 +60,7 @@ CONFIG_CP15_BARRIER_EMULATION=y
CONFIG_SETEND_EMULATION=y CONFIG_SETEND_EMULATION=y
CONFIG_RANDOMIZE_BASE=y CONFIG_RANDOMIZE_BASE=y
# CONFIG_RANDOMIZE_MODULE_REGION_FULL is not set # CONFIG_RANDOMIZE_MODULE_REGION_FULL is not set
CONFIG_CMDLINE="stack_depot_disable=on kasan.stacktrace=off kvm-arm.mode=protected cgroup_disable=pressure" CONFIG_CMDLINE="stack_depot_disable=on kasan.stacktrace=off kvm-arm.mode=protected cgroup_disable=pressure cgroup.memory=nokmem"
CONFIG_CMDLINE_EXTEND=y CONFIG_CMDLINE_EXTEND=y
# CONFIG_DMI is not set # CONFIG_DMI is not set
CONFIG_PM_WAKELOCKS=y CONFIG_PM_WAKELOCKS=y

View File

@@ -53,7 +53,7 @@ CONFIG_PARAVIRT=y
CONFIG_NR_CPUS=32 CONFIG_NR_CPUS=32
CONFIG_EFI=y CONFIG_EFI=y
CONFIG_CMDLINE_BOOL=y CONFIG_CMDLINE_BOOL=y
CONFIG_CMDLINE="stack_depot_disable=on cgroup_disable=pressure" CONFIG_CMDLINE="stack_depot_disable=on cgroup_disable=pressure cgroup.memory=nokmem"
CONFIG_PM_WAKELOCKS=y CONFIG_PM_WAKELOCKS=y
CONFIG_PM_WAKELOCKS_LIMIT=0 CONFIG_PM_WAKELOCKS_LIMIT=0
# CONFIG_PM_WAKELOCKS_GC is not set # CONFIG_PM_WAKELOCKS_GC is not set

View File

@@ -7,6 +7,7 @@ Image.lz4
" "
ABI_DEFINITION=android/abi_gki_aarch64.xml ABI_DEFINITION=android/abi_gki_aarch64.xml
TIDY_ABI=1
KMI_SYMBOL_LIST=android/abi_gki_aarch64 KMI_SYMBOL_LIST=android/abi_gki_aarch64
ADDITIONAL_KMI_SYMBOL_LISTS=" ADDITIONAL_KMI_SYMBOL_LISTS="
android/abi_gki_aarch64_core android/abi_gki_aarch64_core

View File

@@ -52,7 +52,7 @@ const u32 *__initcall_start = &__initcall_start_marker;
const u8 *__text_start = &__fips140_text_start; const u8 *__text_start = &__fips140_text_start;
const u8 *__rodata_start = &__fips140_rodata_start; const u8 *__rodata_start = &__fips140_rodata_start;
static const char fips140_algorithms[][22] __initconst = { static const char * const fips140_algorithms[] __initconst = {
"aes", "aes",
"gcm(aes)", "gcm(aes)",
@@ -73,28 +73,7 @@ static const char fips140_algorithms[][22] __initconst = {
"sha384", "sha384",
"sha512", "sha512",
"drbg_nopr_ctr_aes256", "stdrng",
"drbg_nopr_ctr_aes192",
"drbg_nopr_ctr_aes128",
"drbg_nopr_hmac_sha512",
"drbg_nopr_hmac_sha384",
"drbg_nopr_hmac_sha256",
"drbg_nopr_hmac_sha1",
"drbg_nopr_sha512",
"drbg_nopr_sha384",
"drbg_nopr_sha256",
"drbg_nopr_sha1",
"drbg_pr_ctr_aes256",
"drbg_pr_ctr_aes192",
"drbg_pr_ctr_aes128",
"drbg_pr_hmac_sha512",
"drbg_pr_hmac_sha384",
"drbg_pr_hmac_sha256",
"drbg_pr_hmac_sha1",
"drbg_pr_sha512",
"drbg_pr_sha384",
"drbg_pr_sha256",
"drbg_pr_sha1",
}; };
static bool __init is_fips140_algo(struct crypto_alg *alg) static bool __init is_fips140_algo(struct crypto_alg *alg)
@@ -116,6 +95,38 @@ static bool __init is_fips140_algo(struct crypto_alg *alg)
static LIST_HEAD(unchecked_fips140_algos); static LIST_HEAD(unchecked_fips140_algos);
/*
* Release a list of algorithms which have been removed from crypto_alg_list.
*
* Note that even though the list is a private list, we have to hold
* crypto_alg_sem while iterating through it because crypto_unregister_alg() may
* run concurrently (as we haven't taken a reference to the algorithms on the
* list), and crypto_unregister_alg() will remove the algorithm from whichever
* list it happens to be on, while holding crypto_alg_sem. That's okay, since
* in that case crypto_unregister_alg() will handle the crypto_alg_put().
*/
static void fips140_remove_final(struct list_head *list)
{
struct crypto_alg *alg;
struct crypto_alg *n;
/*
* We need to take crypto_alg_sem to safely traverse the list (see
* comment above), but we have to drop it when doing each
* crypto_alg_put() as that may take crypto_alg_sem again.
*/
down_write(&crypto_alg_sem);
list_for_each_entry_safe(alg, n, list, cra_list) {
list_del_init(&alg->cra_list);
up_write(&crypto_alg_sem);
crypto_alg_put(alg);
down_write(&crypto_alg_sem);
}
up_write(&crypto_alg_sem);
}
static void __init unregister_existing_fips140_algos(void) static void __init unregister_existing_fips140_algos(void)
{ {
struct crypto_alg *alg, *tmp; struct crypto_alg *alg, *tmp;
@@ -152,25 +163,17 @@ static void __init unregister_existing_fips140_algos(void)
* transformations. We will swap these out * transformations. We will swap these out
* later with integrity checked versions. * later with integrity checked versions.
*/ */
pr_info("found already-live algorithm '%s' ('%s')\n",
alg->cra_name, alg->cra_driver_name);
list_move(&alg->cra_list, list_move(&alg->cra_list,
&unchecked_fips140_algos); &unchecked_fips140_algos);
} }
} }
} }
/*
* We haven't taken a reference to the algorithms on the remove_list,
* so technically, we may be competing with a concurrent invocation of
* crypto_unregister_alg() here. Fortunately, crypto_unregister_alg()
* just gives up with a warning if the algo that is being unregistered
* has already disappeared, so this happens to be safe. That does mean
* we need to hold on to the lock, to ensure that the algo is either on
* the list or it is not, and not in some limbo state.
*/
crypto_remove_final(&remove_list);
crypto_remove_final(&spawns);
up_write(&crypto_alg_sem); up_write(&crypto_alg_sem);
fips140_remove_final(&remove_list);
fips140_remove_final(&spawns);
} }
static void __init unapply_text_relocations(void *section, int section_size, static void __init unapply_text_relocations(void *section, int section_size,
@@ -250,8 +253,8 @@ static bool __init check_fips140_module_hmac(void)
textsize = &__fips140_text_end - &__fips140_text_start; textsize = &__fips140_text_end - &__fips140_text_start;
rodatasize = &__fips140_rodata_end - &__fips140_rodata_start; rodatasize = &__fips140_rodata_end - &__fips140_rodata_start;
pr_warn("text size : 0x%x\n", textsize); pr_info("text size : 0x%x\n", textsize);
pr_warn("rodata size: 0x%x\n", rodatasize); pr_info("rodata size: 0x%x\n", rodatasize);
textcopy = kmalloc(textsize + rodatasize, GFP_KERNEL); textcopy = kmalloc(textsize + rodatasize, GFP_KERNEL);
if (!textcopy) { if (!textcopy) {
@@ -283,7 +286,7 @@ static bool __init check_fips140_module_hmac(void)
return false; return false;
} }
pr_warn("using '%s' for integrity check\n", pr_info("using '%s' for integrity check\n",
crypto_shash_driver_name(desc->tfm)); crypto_shash_driver_name(desc->tfm));
err = crypto_shash_setkey(desc->tfm, fips140_integ_hmac_key, err = crypto_shash_setkey(desc->tfm, fips140_integ_hmac_key,
@@ -523,11 +526,12 @@ static bool update_fips140_library_routines(void)
* let's disable CFI locally when handling the initcall array, to avoid * let's disable CFI locally when handling the initcall array, to avoid
* surpises. * surpises.
*/ */
int __init __attribute__((__no_sanitize__("cfi"))) fips140_init(void) static int __init __attribute__((__no_sanitize__("cfi")))
fips140_init(void)
{ {
const u32 *initcall; const u32 *initcall;
pr_info("Loading FIPS 140 module\n"); pr_info("loading module\n");
unregister_existing_fips140_algos(); unregister_existing_fips140_algos();
@@ -536,8 +540,17 @@ int __init __attribute__((__no_sanitize__("cfi"))) fips140_init(void)
initcall < &__initcall_end_marker; initcall < &__initcall_end_marker;
initcall++) { initcall++) {
int (*init)(void) = offset_to_ptr(initcall); int (*init)(void) = offset_to_ptr(initcall);
int err = init();
init(); /*
* ENODEV is expected from initcalls that only register
* algorithms that depend on non-present CPU features. Besides
* that, errors aren't expected here.
*/
if (err && err != -ENODEV) {
pr_err("initcall %ps() failed: %d\n", init, err);
goto panic;
}
} }
if (!update_live_fips140_algos()) if (!update_live_fips140_algos())
@@ -563,12 +576,12 @@ int __init __attribute__((__no_sanitize__("cfi"))) fips140_init(void)
*/ */
if (!check_fips140_module_hmac()) { if (!check_fips140_module_hmac()) {
pr_crit("FIPS 140 integrity check failed -- giving up!\n"); pr_crit("integrity check failed -- giving up!\n");
goto panic; goto panic;
} }
pr_info("integrity check passed\n");
pr_info("FIPS 140 integrity check successful\n"); pr_info("module successfully loaded\n");
pr_info("FIPS 140 module successfully loaded\n");
return 0; return 0;
panic: panic:

View File

@@ -64,6 +64,10 @@
#include <trace/hooks/cpuidle_psci.h> #include <trace/hooks/cpuidle_psci.h>
#include <trace/hooks/fips140.h> #include <trace/hooks/fips140.h>
#include <trace/hooks/remoteproc.h> #include <trace/hooks/remoteproc.h>
#include <trace/hooks/shmem_fs.h>
#include <trace/hooks/net.h>
#include <trace/hooks/syscall_check.h>
#include <trace/hooks/usb.h>
/* /*
* Export tracepoints that act as a bare tracehook (ie: have no trace event * Export tracepoints that act as a bare tracehook (ie: have no trace event
@@ -106,6 +110,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_read_wait_finish);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_wait_start); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_wait_start);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_wait_finish); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_wait_finish);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sched_show_task); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sched_show_task);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shmem_alloc_page);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cpu_idle_enter); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cpu_idle_enter);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cpu_idle_exit); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cpu_idle_exit);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mpam_set); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mpam_set);
@@ -207,6 +212,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_send_uic_command);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_send_tm_command); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_send_tm_command);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_check_int_errors); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_check_int_errors);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_update_sdev); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_update_sdev);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_clock_scaling);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_wake_up_sync); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_wake_up_sync);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_set_wake_flags); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_set_wake_flags);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_uclamp_eff_get); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_uclamp_eff_get);
@@ -244,9 +250,9 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_set_module_permit_after_init);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_util_est_update); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_util_est_update);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_meminfo_proc_show); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_meminfo_proc_show);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_exit_mm); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_exit_mm);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_get_unmapped_area_from_anti_fragment_pool); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_get_from_fragment_pool);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_exclude_reserved_zone); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_exclude_reserved_zone);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_get_unmapped_area_include_reserved_zone); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_include_reserved_zone);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_pages_slowpath); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_pages_slowpath);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_mem); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_mem);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_print_slabinfo_header); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_print_slabinfo_header);
@@ -310,6 +316,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mmc_gpio_cd_irqt);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_save_vmalloc_stack); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_save_vmalloc_stack);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_stack_hash); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_stack_hash);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_save_track_hash); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_save_track_hash);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_vmpressure);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_set_task_comm); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_set_task_comm);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cpufreq_acct_update_power); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cpufreq_acct_update_power);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_typec_tcpm_log); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_typec_tcpm_log);
@@ -339,3 +346,10 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_force_compatible_post);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_print_transaction_info); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_print_transaction_info);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_setscheduler_uclamp); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_setscheduler_uclamp);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rproc_recovery); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rproc_recovery);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ptype_head);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_kfree_skb);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_check_mmap_file);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_check_file_open);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_check_bpf_syscall);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_usb_dev_suspend);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_usb_dev_resume);

View File

@@ -212,6 +212,9 @@ int cpuidle_enter_state(struct cpuidle_device *dev, struct cpuidle_driver *drv,
* broadcast must be assigned after the vendor hook. * broadcast must be assigned after the vendor hook.
*/ */
trace_android_vh_cpu_idle_enter(&index, dev); trace_android_vh_cpu_idle_enter(&index, dev);
if (index < 0)
return index;
target_state = &drv->states[index]; target_state = &drv->states[index];
broadcast = !!(target_state->flags & CPUIDLE_FLAG_TIMER_STOP); broadcast = !!(target_state->flags & CPUIDLE_FLAG_TIMER_STOP);
@@ -428,7 +431,7 @@ void cpuidle_uninstall_idle_handler(void)
{ {
if (enabled_devices) { if (enabled_devices) {
initialized = 0; initialized = 0;
wake_up_all_idle_cpus(); wake_up_all_online_idle_cpus();
} }
/* /*

View File

@@ -99,9 +99,10 @@ static struct sg_table *cma_heap_map_dma_buf(struct dma_buf_attachment *attachme
{ {
struct dma_heap_attachment *a = attachment->priv; struct dma_heap_attachment *a = attachment->priv;
struct sg_table *table = &a->table; struct sg_table *table = &a->table;
int attrs = attachment->dma_map_attrs;
int ret; int ret;
ret = dma_map_sgtable(attachment->dev, table, direction, 0); ret = dma_map_sgtable(attachment->dev, table, direction, attrs);
if (ret) if (ret)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
a->mapped = true; a->mapped = true;
@@ -113,9 +114,10 @@ static void cma_heap_unmap_dma_buf(struct dma_buf_attachment *attachment,
enum dma_data_direction direction) enum dma_data_direction direction)
{ {
struct dma_heap_attachment *a = attachment->priv; struct dma_heap_attachment *a = attachment->priv;
int attrs = attachment->dma_map_attrs;
a->mapped = false; a->mapped = false;
dma_unmap_sgtable(attachment->dev, table, direction, 0); dma_unmap_sgtable(attachment->dev, table, direction, attrs);
} }
static int cma_heap_dma_buf_begin_cpu_access(struct dma_buf *dmabuf, static int cma_heap_dma_buf_begin_cpu_access(struct dma_buf *dmabuf,

View File

@@ -140,11 +140,11 @@ static struct sg_table *system_heap_map_dma_buf(struct dma_buf_attachment *attac
{ {
struct dma_heap_attachment *a = attachment->priv; struct dma_heap_attachment *a = attachment->priv;
struct sg_table *table = a->table; struct sg_table *table = a->table;
int attr = 0; int attr = attachment->dma_map_attrs;
int ret; int ret;
if (a->uncached) if (a->uncached)
attr = DMA_ATTR_SKIP_CPU_SYNC; attr |= DMA_ATTR_SKIP_CPU_SYNC;
ret = dma_map_sgtable(attachment->dev, table, direction, attr); ret = dma_map_sgtable(attachment->dev, table, direction, attr);
if (ret) if (ret)
@@ -159,10 +159,10 @@ static void system_heap_unmap_dma_buf(struct dma_buf_attachment *attachment,
enum dma_data_direction direction) enum dma_data_direction direction)
{ {
struct dma_heap_attachment *a = attachment->priv; struct dma_heap_attachment *a = attachment->priv;
int attr = 0; int attr = attachment->dma_map_attrs;
if (a->uncached) if (a->uncached)
attr = DMA_ATTR_SKIP_CPU_SYNC; attr |= DMA_ATTR_SKIP_CPU_SYNC;
a->mapped = false; a->mapped = false;
dma_unmap_sgtable(attachment->dev, table, direction, attr); dma_unmap_sgtable(attachment->dev, table, direction, attr);
} }

View File

@@ -50,20 +50,6 @@ struct redist_region {
bool single_redist; bool single_redist;
}; };
struct gic_chip_data {
struct fwnode_handle *fwnode;
void __iomem *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;
};
static struct gic_chip_data gic_data __read_mostly; static struct gic_chip_data gic_data __read_mostly;
static DEFINE_STATIC_KEY_TRUE(supports_deactivate_key); static DEFINE_STATIC_KEY_TRUE(supports_deactivate_key);

View File

@@ -1817,6 +1817,7 @@ int of_add_property(struct device_node *np, struct property *prop)
return rc; return rc;
} }
EXPORT_SYMBOL_GPL(of_add_property);
int __of_remove_property(struct device_node *np, struct property *prop) int __of_remove_property(struct device_node *np, struct property *prop)
{ {

View File

@@ -1288,6 +1288,8 @@ static int ufshcd_devfreq_target(struct device *dev,
struct list_head *clk_list = &hba->clk_list_head; struct list_head *clk_list = &hba->clk_list_head;
struct ufs_clk_info *clki; struct ufs_clk_info *clki;
unsigned long irq_flags; unsigned long irq_flags;
bool force_out = false;
bool force_scaling = false;
if (!ufshcd_is_clkscaling_supported(hba)) if (!ufshcd_is_clkscaling_supported(hba))
return -EINVAL; return -EINVAL;
@@ -1313,8 +1315,11 @@ static int ufshcd_devfreq_target(struct device *dev,
scale_up = (*freq == clki->max_freq) ? true : false; scale_up = (*freq == clki->max_freq) ? true : false;
if (!scale_up) if (!scale_up)
*freq = clki->min_freq; *freq = clki->min_freq;
trace_android_vh_ufs_clock_scaling(hba, &force_out, &force_scaling, &scale_up);
/* Update the frequency */ /* Update the frequency */
if (!ufshcd_is_devfreq_scaling_required(hba, scale_up)) { if (force_out || (!force_scaling && !ufshcd_is_devfreq_scaling_required(hba, scale_up))) {
spin_unlock_irqrestore(hba->host->host_lock, irq_flags); spin_unlock_irqrestore(hba->host->host_lock, irq_flags);
ret = 0; ret = 0;
goto out; /* no state change required */ goto out; /* no state change required */
@@ -2318,6 +2323,9 @@ int ufshcd_send_uic_cmd(struct ufs_hba *hba, struct uic_command *uic_cmd)
int ret; int ret;
unsigned long flags; unsigned long flags;
if (hba->quirks & UFSHCD_QUIRK_BROKEN_UIC_CMD)
return 0;
ufshcd_hold(hba, false); ufshcd_hold(hba, false);
mutex_lock(&hba->uic_cmd_mutex); mutex_lock(&hba->uic_cmd_mutex);
ufshcd_add_delay_before_dme_cmd(hba); ufshcd_add_delay_before_dme_cmd(hba);
@@ -2727,15 +2735,6 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
WARN_ON(ufshcd_is_clkgating_allowed(hba) && WARN_ON(ufshcd_is_clkgating_allowed(hba) &&
(hba->clk_gating.state != CLKS_ON)); (hba->clk_gating.state != CLKS_ON));
if (unlikely(test_bit(tag, &hba->outstanding_reqs))) {
if (hba->pm_op_in_progress)
set_host_byte(cmd, DID_BAD_TARGET);
else
err = SCSI_MLQUEUE_HOST_BUSY;
ufshcd_release(hba);
goto out;
}
lrbp = &hba->lrb[tag]; lrbp = &hba->lrb[tag];
WARN_ON(lrbp->cmd); WARN_ON(lrbp->cmd);
lrbp->cmd = cmd; lrbp->cmd = cmd;
@@ -2948,11 +2947,6 @@ static int ufshcd_exec_dev_cmd(struct ufs_hba *hba,
req->timeout = msecs_to_jiffies(2 * timeout); req->timeout = msecs_to_jiffies(2 * timeout);
blk_mq_start_request(req); blk_mq_start_request(req);
if (unlikely(test_bit(tag, &hba->outstanding_reqs))) {
err = -EBUSY;
goto out;
}
init_completion(&wait); init_completion(&wait);
lrbp = &hba->lrb[tag]; lrbp = &hba->lrb[tag];
WARN_ON(lrbp->cmd); WARN_ON(lrbp->cmd);
@@ -3115,14 +3109,14 @@ int ufshcd_query_attr(struct ufs_hba *hba, enum query_opcode opcode,
BUG_ON(!hba); BUG_ON(!hba);
ufshcd_hold(hba, false);
if (!attr_val) { if (!attr_val) {
dev_err(hba->dev, "%s: attribute value required for opcode 0x%x\n", dev_err(hba->dev, "%s: attribute value required for opcode 0x%x\n",
__func__, opcode); __func__, opcode);
err = -EINVAL; return -EINVAL;
goto out;
} }
ufshcd_hold(hba, false);
mutex_lock(&hba->dev_cmd.lock); mutex_lock(&hba->dev_cmd.lock);
ufshcd_init_query(hba, &request, &response, opcode, idn, index, ufshcd_init_query(hba, &request, &response, opcode, idn, index,
selector); selector);
@@ -3154,7 +3148,6 @@ int ufshcd_query_attr(struct ufs_hba *hba, enum query_opcode opcode,
out_unlock: out_unlock:
mutex_unlock(&hba->dev_cmd.lock); mutex_unlock(&hba->dev_cmd.lock);
out:
ufshcd_release(hba); ufshcd_release(hba);
return err; return err;
} }
@@ -3208,21 +3201,20 @@ static int __ufshcd_query_descriptor(struct ufs_hba *hba,
BUG_ON(!hba); BUG_ON(!hba);
ufshcd_hold(hba, false);
if (!desc_buf) { if (!desc_buf) {
dev_err(hba->dev, "%s: descriptor buffer required for opcode 0x%x\n", dev_err(hba->dev, "%s: descriptor buffer required for opcode 0x%x\n",
__func__, opcode); __func__, opcode);
err = -EINVAL; return -EINVAL;
goto out;
} }
if (*buf_len < QUERY_DESC_MIN_SIZE || *buf_len > QUERY_DESC_MAX_SIZE) { if (*buf_len < QUERY_DESC_MIN_SIZE || *buf_len > QUERY_DESC_MAX_SIZE) {
dev_err(hba->dev, "%s: descriptor buffer size (%d) is out of range\n", dev_err(hba->dev, "%s: descriptor buffer size (%d) is out of range\n",
__func__, *buf_len); __func__, *buf_len);
err = -EINVAL; return -EINVAL;
goto out;
} }
ufshcd_hold(hba, false);
mutex_lock(&hba->dev_cmd.lock); mutex_lock(&hba->dev_cmd.lock);
ufshcd_init_query(hba, &request, &response, opcode, idn, index, ufshcd_init_query(hba, &request, &response, opcode, idn, index,
selector); selector);
@@ -3257,7 +3249,6 @@ static int __ufshcd_query_descriptor(struct ufs_hba *hba,
out_unlock: out_unlock:
hba->dev_cmd.query.descriptor = NULL; hba->dev_cmd.query.descriptor = NULL;
mutex_unlock(&hba->dev_cmd.lock); mutex_unlock(&hba->dev_cmd.lock);
out:
ufshcd_release(hba); ufshcd_release(hba);
return err; return err;
} }
@@ -6668,11 +6659,6 @@ static int ufshcd_issue_devman_upiu_cmd(struct ufs_hba *hba,
tag = req->tag; tag = req->tag;
WARN_ON_ONCE(!ufshcd_valid_tag(hba, tag)); WARN_ON_ONCE(!ufshcd_valid_tag(hba, tag));
if (unlikely(test_bit(tag, &hba->outstanding_reqs))) {
err = -EBUSY;
goto out;
}
init_completion(&wait); init_completion(&wait);
lrbp = &hba->lrb[tag]; lrbp = &hba->lrb[tag];
WARN_ON(lrbp->cmd); WARN_ON(lrbp->cmd);
@@ -6740,7 +6726,6 @@ static int ufshcd_issue_devman_upiu_cmd(struct ufs_hba *hba,
} }
} }
out:
blk_put_request(req); blk_put_request(req);
out_unlock: out_unlock:
up_read(&hba->clk_scaling_lock); up_read(&hba->clk_scaling_lock);
@@ -6879,7 +6864,8 @@ static void ufshcd_set_req_abort_skip(struct ufs_hba *hba, unsigned long bitmap)
/** /**
* ufshcd_try_to_abort_task - abort a specific task * ufshcd_try_to_abort_task - abort a specific task
* @cmd: SCSI command pointer * @hba: Pointer to adapter instance
* @tag: Task tag/index to be aborted
* *
* Abort the pending command in device by sending UFS_ABORT_TASK task management * Abort the pending command in device by sending UFS_ABORT_TASK task management
* command, and in host controller by clearing the door-bell register. There can * command, and in host controller by clearing the door-bell register. There can
@@ -6969,7 +6955,7 @@ static int ufshcd_abort(struct scsi_cmnd *cmd)
struct ufs_hba *hba; struct ufs_hba *hba;
unsigned long flags; unsigned long flags;
unsigned int tag; unsigned int tag;
int err = 0; int err = FAILED, res;
struct ufshcd_lrb *lrbp; struct ufshcd_lrb *lrbp;
u32 reg; u32 reg;
@@ -6986,12 +6972,12 @@ static int ufshcd_abort(struct scsi_cmnd *cmd)
ufshcd_hold(hba, false); ufshcd_hold(hba, false);
reg = ufshcd_readl(hba, REG_UTP_TRANSFER_REQ_DOOR_BELL); reg = ufshcd_readl(hba, REG_UTP_TRANSFER_REQ_DOOR_BELL);
/* If command is already aborted/completed, return SUCCESS */ /* If command is already aborted/completed, return FAILED. */
if (!(test_bit(tag, &hba->outstanding_reqs))) { if (!(test_bit(tag, &hba->outstanding_reqs))) {
dev_err(hba->dev, dev_err(hba->dev,
"%s: cmd at tag %d already completed, outstanding=0x%lx, doorbell=0x%x\n", "%s: cmd at tag %d already completed, outstanding=0x%lx, doorbell=0x%x\n",
__func__, tag, hba->outstanding_reqs, reg); __func__, tag, hba->outstanding_reqs, reg);
goto out; goto release;
} }
/* Print Transfer Request of aborted task */ /* Print Transfer Request of aborted task */
@@ -7020,7 +7006,8 @@ static int ufshcd_abort(struct scsi_cmnd *cmd)
dev_err(hba->dev, dev_err(hba->dev,
"%s: cmd was completed, but without a notifying intr, tag = %d", "%s: cmd was completed, but without a notifying intr, tag = %d",
__func__, tag); __func__, tag);
goto cleanup; __ufshcd_transfer_req_compl(hba, 1UL << tag);
goto release;
} }
/* /*
@@ -7033,36 +7020,32 @@ static int ufshcd_abort(struct scsi_cmnd *cmd)
*/ */
if (lrbp->lun == UFS_UPIU_UFS_DEVICE_WLUN) { if (lrbp->lun == UFS_UPIU_UFS_DEVICE_WLUN) {
ufshcd_update_evt_hist(hba, UFS_EVT_ABORT, lrbp->lun); ufshcd_update_evt_hist(hba, UFS_EVT_ABORT, lrbp->lun);
__ufshcd_transfer_req_compl(hba, (1UL << tag));
set_bit(tag, &hba->outstanding_reqs);
spin_lock_irqsave(host->host_lock, flags); spin_lock_irqsave(host->host_lock, flags);
hba->force_reset = true; hba->force_reset = true;
ufshcd_schedule_eh_work(hba); ufshcd_schedule_eh_work(hba);
spin_unlock_irqrestore(host->host_lock, flags); spin_unlock_irqrestore(host->host_lock, flags);
goto out; goto release;
} }
/* Skip task abort in case previous aborts failed and report failure */ /* Skip task abort in case previous aborts failed and report failure */
if (lrbp->req_abort_skip) if (lrbp->req_abort_skip) {
err = -EIO; dev_err(hba->dev, "%s: skipping abort\n", __func__);
else
err = ufshcd_try_to_abort_task(hba, tag);
if (!err) {
cleanup:
__ufshcd_transfer_req_compl(hba, (1UL << tag));
out:
err = SUCCESS;
} else {
dev_err(hba->dev, "%s: failed with err %d\n", __func__, err);
ufshcd_set_req_abort_skip(hba, hba->outstanding_reqs); ufshcd_set_req_abort_skip(hba, hba->outstanding_reqs);
err = FAILED; goto release;
} }
/* res = ufshcd_try_to_abort_task(hba, tag);
* This ufshcd_release() corresponds to the original scsi cmd that got if (res) {
* aborted here (as we won't get any IRQ for it). dev_err(hba->dev, "%s: failed with err %d\n", __func__, res);
*/ ufshcd_set_req_abort_skip(hba, hba->outstanding_reqs);
goto release;
}
err = SUCCESS;
release:
/* Matches the ufshcd_hold() call at the start of this function. */
ufshcd_release(hba); ufshcd_release(hba);
return err; return err;
} }
@@ -7981,6 +7964,9 @@ static int ufshcd_probe_hba(struct ufs_hba *hba, bool async)
if (ret) if (ret)
goto out; goto out;
if (hba->quirks & UFSHCD_QUIRK_SKIP_INTERFACE_CONFIGURATION)
goto out;
/* Debug counters initialization */ /* Debug counters initialization */
ufshcd_clear_dbg_ufs_stats(hba); ufshcd_clear_dbg_ufs_stats(hba);

View File

@@ -565,6 +565,18 @@ enum ufshcd_quirks {
*/ */
UFSHCD_QUIRK_ALIGN_SG_WITH_PAGE_SIZE = 1 << 14, UFSHCD_QUIRK_ALIGN_SG_WITH_PAGE_SIZE = 1 << 14,
/*
* This quirk needs to be enabled if the host controller does not
* support UIC command
*/
UFSHCD_QUIRK_BROKEN_UIC_CMD = 1 << 15,
/*
* This quirk needs to be enabled if the host controller cannot
* support interface configuration.
*/
UFSHCD_QUIRK_SKIP_INTERFACE_CONFIGURATION = 1 << 16,
/* /*
* This quirk needs to be enabled if the host controller supports inline * This quirk needs to be enabled if the host controller supports inline
* encryption, but it needs to initialize the crypto capabilities in a * encryption, but it needs to initialize the crypto capabilities in a

View File

@@ -34,6 +34,7 @@
#include "usb.h" #include "usb.h"
#include <trace/hooks/usb.h>
/* /*
* Adds a new dynamic USBdevice ID to this driver, * Adds a new dynamic USBdevice ID to this driver,
@@ -1403,11 +1404,16 @@ static int usb_suspend_both(struct usb_device *udev, pm_message_t msg)
int status = 0; int status = 0;
int i = 0, n = 0; int i = 0, n = 0;
struct usb_interface *intf; struct usb_interface *intf;
int bypass = 0;
if (udev->state == USB_STATE_NOTATTACHED || if (udev->state == USB_STATE_NOTATTACHED ||
udev->state == USB_STATE_SUSPENDED) udev->state == USB_STATE_SUSPENDED)
goto done; goto done;
trace_android_vh_usb_dev_suspend(udev, msg, &bypass);
if (bypass)
goto done;
/* Suspend all the interfaces and then udev itself */ /* Suspend all the interfaces and then udev itself */
if (udev->actconfig) { if (udev->actconfig) {
n = udev->actconfig->desc.bNumInterfaces; n = udev->actconfig->desc.bNumInterfaces;
@@ -1504,11 +1510,17 @@ static int usb_resume_both(struct usb_device *udev, pm_message_t msg)
int status = 0; int status = 0;
int i; int i;
struct usb_interface *intf; struct usb_interface *intf;
int bypass = 0;
if (udev->state == USB_STATE_NOTATTACHED) { if (udev->state == USB_STATE_NOTATTACHED) {
status = -ENODEV; status = -ENODEV;
goto done; goto done;
} }
trace_android_vh_usb_dev_resume(udev, msg, &bypass);
if (bypass)
goto done;
udev->can_submit = 1; udev->can_submit = 1;
/* Resume the device */ /* Resume the device */

View File

@@ -879,8 +879,6 @@ struct dwc3_hwparams {
/* HWPARAMS0 */ /* HWPARAMS0 */
#define DWC3_MODE(n) ((n) & 0x7) #define DWC3_MODE(n) ((n) & 0x7)
#define DWC3_MDWIDTH(n) (((n) & 0xff00) >> 8)
/* HWPARAMS1 */ /* HWPARAMS1 */
#define DWC3_NUM_INT(n) (((n) & (0x3f << 15)) >> 15) #define DWC3_NUM_INT(n) (((n) & (0x3f << 15)) >> 15)
@@ -1493,6 +1491,23 @@ u32 dwc3_core_fifo_space(struct dwc3_ep *dep, u8 type);
(!(_ip##_VERSIONTYPE_##_to) || \ (!(_ip##_VERSIONTYPE_##_to) || \
dwc->version_type <= _ip##_VERSIONTYPE_##_to)) dwc->version_type <= _ip##_VERSIONTYPE_##_to))
/**
* dwc3_mdwidth - get MDWIDTH value in bits
* @dwc: pointer to our context structure
*
* Return MDWIDTH configuration value in bits.
*/
static inline u32 dwc3_mdwidth(struct dwc3 *dwc)
{
u32 mdwidth;
mdwidth = DWC3_GHWPARAMS0_MDWIDTH(dwc->hwparams.hwparams0);
if (DWC3_IP_IS(DWC32))
mdwidth += DWC3_GHWPARAMS6_MDWIDTH(dwc->hwparams.hwparams6);
return mdwidth;
}
bool dwc3_has_imod(struct dwc3 *dwc); bool dwc3_has_imod(struct dwc3 *dwc);
int dwc3_event_buffers_setup(struct dwc3 *dwc); int dwc3_event_buffers_setup(struct dwc3 *dwc);

View File

@@ -638,16 +638,14 @@ static int dwc3_tx_fifo_size_show(struct seq_file *s, void *unused)
struct dwc3_ep *dep = s->private; struct dwc3_ep *dep = s->private;
struct dwc3 *dwc = dep->dwc; struct dwc3 *dwc = dep->dwc;
unsigned long flags; unsigned long flags;
int mdwidth; u32 mdwidth;
u32 val; u32 val;
spin_lock_irqsave(&dwc->lock, flags); spin_lock_irqsave(&dwc->lock, flags);
val = dwc3_core_fifo_space(dep, DWC3_TXFIFO); val = dwc3_core_fifo_space(dep, DWC3_TXFIFO);
/* Convert to bytes */ /* Convert to bytes */
mdwidth = DWC3_MDWIDTH(dwc->hwparams.hwparams0); mdwidth = dwc3_mdwidth(dwc);
if (DWC3_IP_IS(DWC32))
mdwidth += DWC3_GHWPARAMS6_MDWIDTH(dwc->hwparams.hwparams6);
val *= mdwidth; val *= mdwidth;
val >>= 3; val >>= 3;
@@ -662,16 +660,14 @@ static int dwc3_rx_fifo_size_show(struct seq_file *s, void *unused)
struct dwc3_ep *dep = s->private; struct dwc3_ep *dep = s->private;
struct dwc3 *dwc = dep->dwc; struct dwc3 *dwc = dep->dwc;
unsigned long flags; unsigned long flags;
int mdwidth; u32 mdwidth;
u32 val; u32 val;
spin_lock_irqsave(&dwc->lock, flags); spin_lock_irqsave(&dwc->lock, flags);
val = dwc3_core_fifo_space(dep, DWC3_RXFIFO); val = dwc3_core_fifo_space(dep, DWC3_RXFIFO);
/* Convert to bytes */ /* Convert to bytes */
mdwidth = DWC3_MDWIDTH(dwc->hwparams.hwparams0); mdwidth = dwc3_mdwidth(dwc);
if (DWC3_IP_IS(DWC32))
mdwidth += DWC3_GHWPARAMS6_MDWIDTH(dwc->hwparams.hwparams6);
val *= mdwidth; val *= mdwidth;
val >>= 3; val >>= 3;

View File

@@ -2367,9 +2367,7 @@ static void dwc3_gadget_setup_nump(struct dwc3 *dwc)
u32 reg; u32 reg;
ram2_depth = DWC3_GHWPARAMS7_RAM2_DEPTH(dwc->hwparams.hwparams7); ram2_depth = DWC3_GHWPARAMS7_RAM2_DEPTH(dwc->hwparams.hwparams7);
mdwidth = DWC3_GHWPARAMS0_MDWIDTH(dwc->hwparams.hwparams0); mdwidth = dwc3_mdwidth(dwc);
if (DWC3_IP_IS(DWC32))
mdwidth += DWC3_GHWPARAMS6_MDWIDTH(dwc->hwparams.hwparams6);
nump = ((ram2_depth * mdwidth / 8) - 24 - 16) / 1024; nump = ((ram2_depth * mdwidth / 8) - 24 - 16) / 1024;
nump = min_t(u32, nump, 16); nump = min_t(u32, nump, 16);
@@ -2632,12 +2630,10 @@ static int dwc3_gadget_init_control_endpoint(struct dwc3_ep *dep)
static int dwc3_gadget_init_in_endpoint(struct dwc3_ep *dep) static int dwc3_gadget_init_in_endpoint(struct dwc3_ep *dep)
{ {
struct dwc3 *dwc = dep->dwc; struct dwc3 *dwc = dep->dwc;
int mdwidth; u32 mdwidth;
int size; int size;
mdwidth = DWC3_MDWIDTH(dwc->hwparams.hwparams0); mdwidth = dwc3_mdwidth(dwc);
if (DWC3_IP_IS(DWC32))
mdwidth += DWC3_GHWPARAMS6_MDWIDTH(dwc->hwparams.hwparams6);
/* MDWIDTH is represented in bits, we need it in bytes */ /* MDWIDTH is represented in bits, we need it in bytes */
mdwidth /= 8; mdwidth /= 8;
@@ -2679,12 +2675,10 @@ static int dwc3_gadget_init_in_endpoint(struct dwc3_ep *dep)
static int dwc3_gadget_init_out_endpoint(struct dwc3_ep *dep) static int dwc3_gadget_init_out_endpoint(struct dwc3_ep *dep)
{ {
struct dwc3 *dwc = dep->dwc; struct dwc3 *dwc = dep->dwc;
int mdwidth; u32 mdwidth;
int size; int size;
mdwidth = DWC3_MDWIDTH(dwc->hwparams.hwparams0); mdwidth = dwc3_mdwidth(dwc);
if (DWC3_IP_IS(DWC32))
mdwidth += DWC3_GHWPARAMS6_MDWIDTH(dwc->hwparams.hwparams6);
/* MDWIDTH is represented in bits, convert to bytes */ /* MDWIDTH is represented in bits, convert to bytes */
mdwidth /= 8; mdwidth /= 8;

View File

@@ -1534,18 +1534,28 @@ static void configfs_composite_unbind(struct usb_gadget *gadget)
static int android_setup(struct usb_gadget *gadget, static int android_setup(struct usb_gadget *gadget,
const struct usb_ctrlrequest *c) const struct usb_ctrlrequest *c)
{ {
struct usb_composite_dev *cdev = get_gadget_data(gadget); struct usb_composite_dev *cdev;
unsigned long flags; unsigned long flags;
struct gadget_info *gi = container_of(cdev, struct gadget_info, cdev); struct gadget_info *gi;
int value = -EOPNOTSUPP; int value = -EOPNOTSUPP;
struct usb_function_instance *fi; struct usb_function_instance *fi;
spin_lock_irqsave(&cdev->lock, flags); if (!android_device)
return 0;
gi = dev_get_drvdata(android_device);
spin_lock_irqsave(&gi->spinlock, flags);
cdev = get_gadget_data(gadget);
if (!cdev || gi->unbind) {
spin_unlock_irqrestore(&gi->spinlock, flags);
return 0;
}
if (!gi->connected) { if (!gi->connected) {
gi->connected = 1; gi->connected = 1;
schedule_work(&gi->work); schedule_work(&gi->work);
} }
spin_unlock_irqrestore(&cdev->lock, flags);
list_for_each_entry(fi, &gi->available_func, cfs_list) { list_for_each_entry(fi, &gi->available_func, cfs_list) {
if (fi != NULL && fi->f != NULL && fi->f->setup != NULL) { if (fi != NULL && fi->f != NULL && fi->f->setup != NULL) {
value = fi->f->setup(fi->f, c); value = fi->f->setup(fi->f, c);
@@ -1562,12 +1572,11 @@ static int android_setup(struct usb_gadget *gadget,
if (value < 0) if (value < 0)
value = composite_setup(gadget, c); value = composite_setup(gadget, c);
spin_lock_irqsave(&cdev->lock, flags);
if (c->bRequest == USB_REQ_SET_CONFIGURATION && if (c->bRequest == USB_REQ_SET_CONFIGURATION &&
cdev->config) { cdev->config) {
schedule_work(&gi->work); schedule_work(&gi->work);
} }
spin_unlock_irqrestore(&cdev->lock, flags); spin_unlock_irqrestore(&gi->spinlock, flags);
return value; return value;
} }

View File

@@ -3876,6 +3876,8 @@ int f2fs_migrate_page(struct address_space *mapping,
get_page(newpage); get_page(newpage);
} }
/* guarantee to start from no stale private field */
set_page_private(newpage, 0);
if (PagePrivate(page)) { if (PagePrivate(page)) {
set_page_private(newpage, page_private(page)); set_page_private(newpage, page_private(page));
SetPagePrivate(newpage); SetPagePrivate(newpage);

View File

@@ -1329,7 +1329,8 @@ enum {
#define PAGE_PRIVATE_GET_FUNC(name, flagname) \ #define PAGE_PRIVATE_GET_FUNC(name, flagname) \
static inline bool page_private_##name(struct page *page) \ static inline bool page_private_##name(struct page *page) \
{ \ { \
return test_bit(PAGE_PRIVATE_NOT_POINTER, &page_private(page)) && \ return PagePrivate(page) && \
test_bit(PAGE_PRIVATE_NOT_POINTER, &page_private(page)) && \
test_bit(PAGE_PRIVATE_##flagname, &page_private(page)); \ test_bit(PAGE_PRIVATE_##flagname, &page_private(page)); \
} }
@@ -1339,6 +1340,7 @@ static inline void set_page_private_##name(struct page *page) \
if (!PagePrivate(page)) { \ if (!PagePrivate(page)) { \
get_page(page); \ get_page(page); \
SetPagePrivate(page); \ SetPagePrivate(page); \
set_page_private(page, 0); \
} \ } \
set_bit(PAGE_PRIVATE_NOT_POINTER, &page_private(page)); \ set_bit(PAGE_PRIVATE_NOT_POINTER, &page_private(page)); \
set_bit(PAGE_PRIVATE_##flagname, &page_private(page)); \ set_bit(PAGE_PRIVATE_##flagname, &page_private(page)); \
@@ -1390,6 +1392,7 @@ static inline void set_page_private_data(struct page *page, unsigned long data)
if (!PagePrivate(page)) { if (!PagePrivate(page)) {
get_page(page); get_page(page);
SetPagePrivate(page); SetPagePrivate(page);
set_page_private(page, 0);
} }
set_bit(PAGE_PRIVATE_NOT_POINTER, &page_private(page)); set_bit(PAGE_PRIVATE_NOT_POINTER, &page_private(page));
page_private(page) |= data << PAGE_PRIVATE_MAX; page_private(page) |= data << PAGE_PRIVATE_MAX;

View File

@@ -34,6 +34,7 @@
#include <linux/compat.h> #include <linux/compat.h>
#include "internal.h" #include "internal.h"
#include <trace/hooks/syscall_check.h>
int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs, int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
struct file *filp) struct file *filp)
@@ -800,6 +801,7 @@ static int do_dentry_open(struct file *f,
error = -ENODEV; error = -ENODEV;
goto cleanup_all; goto cleanup_all;
} }
trace_android_vh_check_file_open(f);
error = security_file_open(f); error = security_file_open(f);
if (error) if (error)

View File

@@ -21,6 +21,7 @@
#include <linux/pstore_ram.h> #include <linux/pstore_ram.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_address.h> #include <linux/of_address.h>
#include <linux/of_reserved_mem.h>
#include "internal.h" #include "internal.h"
#define RAMOOPS_KERNMSG_HDR "====" #define RAMOOPS_KERNMSG_HDR "===="
@@ -633,21 +634,21 @@ static int ramoops_parse_dt(struct platform_device *pdev,
{ {
struct device_node *of_node = pdev->dev.of_node; struct device_node *of_node = pdev->dev.of_node;
struct device_node *parent_node; struct device_node *parent_node;
struct resource *res; struct reserved_mem *rmem;
u32 value; u32 value;
int ret; int ret;
dev_dbg(&pdev->dev, "using Device Tree\n"); dev_dbg(&pdev->dev, "using Device Tree\n");
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); rmem = of_reserved_mem_lookup(of_node);
if (!res) { if (!rmem) {
dev_err(&pdev->dev, dev_err(&pdev->dev,
"failed to locate DT /reserved-memory resource\n"); "failed to locate DT /reserved-memory resource\n");
return -EINVAL; return -EINVAL;
} }
pdata->mem_size = resource_size(res); pdata->mem_size = rmem->size;
pdata->mem_address = res->start; pdata->mem_address = rmem->base;
/* /*
* Setting "unbuffered" is deprecated and will be ignored if * Setting "unbuffered" is deprecated and will be ignored if
* "mem_type" is also specified. * "mem_type" is also specified.

View File

@@ -2,7 +2,15 @@
#ifndef _FIPS_H #ifndef _FIPS_H
#define _FIPS_H #define _FIPS_H
#ifdef CONFIG_CRYPTO_FIPS #ifdef BUILD_FIPS140_KO
/*
* In fips140.ko, enable the behavior that the upstream fips_enabled flag
* controls, such as the XTS weak key check.
*/
#define fips_enabled 1
#define CONFIG_CRYPTO_FIPS 1
#elif defined(CONFIG_CRYPTO_FIPS)
extern int fips_enabled; extern int fips_enabled;
extern struct atomic_notifier_head fips_fail_notif_chain; extern struct atomic_notifier_head fips_fail_notif_chain;

View File

@@ -693,6 +693,20 @@ int its_init(struct fwnode_handle *handle, struct rdists *rdists,
struct irq_domain *domain); struct irq_domain *domain);
int mbi_init(struct fwnode_handle *fwnode, struct irq_domain *parent); int mbi_init(struct fwnode_handle *fwnode, struct irq_domain *parent);
struct gic_chip_data {
struct fwnode_handle *fwnode;
void __iomem *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;
};
static inline bool gic_enable_sre(void) static inline bool gic_enable_sre(void)
{ {
u32 val; u32 val;

View File

@@ -441,10 +441,31 @@ static inline bool mem_cgroup_below_min(struct mem_cgroup *memcg)
page_counter_read(&memcg->memory); page_counter_read(&memcg->memory);
} }
int mem_cgroup_charge(struct page *page, struct mm_struct *mm, gfp_t gfp_mask); int __mem_cgroup_charge(struct page *page, struct mm_struct *mm,
gfp_t gfp_mask);
static inline int mem_cgroup_charge(struct page *page, struct mm_struct *mm,
gfp_t gfp_mask)
{
if (mem_cgroup_disabled())
return 0;
return __mem_cgroup_charge(page, mm, gfp_mask);
}
void mem_cgroup_uncharge(struct page *page); void __mem_cgroup_uncharge(struct page *page);
void mem_cgroup_uncharge_list(struct list_head *page_list); static inline void mem_cgroup_uncharge(struct page *page)
{
if (mem_cgroup_disabled())
return;
__mem_cgroup_uncharge(page);
}
void __mem_cgroup_uncharge_list(struct list_head *page_list);
static inline void mem_cgroup_uncharge_list(struct list_head *page_list)
{
if (mem_cgroup_disabled())
return;
__mem_cgroup_uncharge_list(page_list);
}
void mem_cgroup_migrate(struct page *oldpage, struct page *newpage); void mem_cgroup_migrate(struct page *oldpage, struct page *newpage);

View File

@@ -756,8 +756,13 @@ struct inode;
*/ */
static inline int put_page_testzero(struct page *page) static inline int put_page_testzero(struct page *page)
{ {
int ret;
VM_BUG_ON_PAGE(page_ref_count(page) == 0, page); VM_BUG_ON_PAGE(page_ref_count(page) == 0, page);
return page_ref_dec_and_test(page); ret = page_ref_dec_and_test(page);
page_pinner_put_page(page);
return ret;
} }
/* /*
@@ -1233,8 +1238,6 @@ static inline void put_page(struct page *page)
{ {
page = compound_head(page); page = compound_head(page);
page_pinner_migration_failed(page);
/* /*
* For devmap managed pages we need to catch refcount transition from * For devmap managed pages we need to catch refcount transition from
* 2 to 1, when refcount reach one it means the page is free and we * 2 to 1, when refcount reach one it means the page is free and we
@@ -3358,6 +3361,8 @@ unsigned long wp_shared_mapping_range(struct address_space *mapping,
extern int sysctl_nr_trim_pages; extern int sysctl_nr_trim_pages;
extern bool pte_map_lock_addr(struct vm_fault *vmf, unsigned long addr); extern bool pte_map_lock_addr(struct vm_fault *vmf, unsigned long addr);
extern int reclaim_shmem_address_space(struct address_space *mapping);
extern int reclaim_pages_from_list(struct list_head *page_list);
/** /**
* seal_check_future_write - Check for F_SEAL_FUTURE_WRITE flag and handle it * seal_check_future_write - Check for F_SEAL_FUTURE_WRITE flag and handle it

View File

@@ -931,6 +931,11 @@ static inline int of_machine_is_compatible(const char *compat)
return 0; return 0;
} }
static inline int of_add_property(struct device_node *np, struct property *prop)
{
return 0;
}
static inline int of_remove_property(struct device_node *np, struct property *prop) static inline int of_remove_property(struct device_node *np, struct property *prop)
{ {
return 0; return 0;

View File

@@ -39,7 +39,15 @@ static inline void dump_page_pinner(struct page *page)
__dump_page_pinner(page); __dump_page_pinner(page);
} }
static inline void page_pinner_migration_failed(struct page *page) static inline void page_pinner_put_page(struct page *page)
{
if (!static_branch_unlikely(&failure_tracking))
return;
__page_pinner_migration_failed(page);
}
static inline void page_pinner_failure_detect(struct page *page)
{ {
if (!static_branch_unlikely(&failure_tracking)) if (!static_branch_unlikely(&failure_tracking))
return; return;
@@ -67,7 +75,10 @@ static inline void set_page_pinner(struct page *page, unsigned int order)
static inline void dump_page_pinner(struct page *page) static inline void dump_page_pinner(struct page *page)
{ {
} }
static inline void page_pinner_migration_failed(struct page *page) static inline void page_pinner_put_page(struct page *page)
{
}
static inline void page_pinner_failure_detect(struct page *page)
{ {
} }
static inline void page_pinner_mark_migration_failed_pages(struct list_head *page_list) static inline void page_pinner_mark_migration_failed_pages(struct list_head *page_list)

View File

@@ -41,6 +41,7 @@
#include <linux/netfilter/nf_conntrack_common.h> #include <linux/netfilter/nf_conntrack_common.h>
#endif #endif
#include <linux/android_kabi.h> #include <linux/android_kabi.h>
#include <linux/android_vendor.h>
/* The interface for checksum offload between the stack and networking drivers /* The interface for checksum offload between the stack and networking drivers
* is as follows... * is as follows...
@@ -532,6 +533,8 @@ struct skb_shared_info {
* remains valid until skb destructor */ * remains valid until skb destructor */
void * destructor_arg; void * destructor_arg;
ANDROID_OEM_DATA_ARRAY(1, 3);
/* must be last field, see pskb_expand_head() */ /* must be last field, see pskb_expand_head() */
skb_frag_t frags[MAX_SKB_FRAGS]; skb_frag_t frags[MAX_SKB_FRAGS];
}; };

View File

@@ -127,6 +127,7 @@ int smp_call_function_any(const struct cpumask *mask,
void kick_all_cpus_sync(void); void kick_all_cpus_sync(void);
void wake_up_all_idle_cpus(void); void wake_up_all_idle_cpus(void);
void wake_up_all_online_idle_cpus(void);
/* /*
* Generic and arch helpers * Generic and arch helpers
@@ -182,6 +183,7 @@ smp_call_function_any(const struct cpumask *mask, smp_call_func_t func,
static inline void kick_all_cpus_sync(void) { } static inline void kick_all_cpus_sync(void) { }
static inline void wake_up_all_idle_cpus(void) { } static inline void wake_up_all_idle_cpus(void) { }
static inline void wake_up_all_online_idle_cpus(void) { }
#ifdef CONFIG_UP_LATE_INIT #ifdef CONFIG_UP_LATE_INIT
extern void __init up_late_init(void); extern void __init up_late_init(void);

View File

@@ -695,7 +695,13 @@ static inline int mem_cgroup_swappiness(struct mem_cgroup *mem)
#endif #endif
#if defined(CONFIG_SWAP) && defined(CONFIG_MEMCG) && defined(CONFIG_BLK_CGROUP) #if defined(CONFIG_SWAP) && defined(CONFIG_MEMCG) && defined(CONFIG_BLK_CGROUP)
extern void cgroup_throttle_swaprate(struct page *page, gfp_t gfp_mask); extern void __cgroup_throttle_swaprate(struct page *page, gfp_t gfp_mask);
static inline void cgroup_throttle_swaprate(struct page *page, gfp_t gfp_mask)
{
if (mem_cgroup_disabled())
return;
__cgroup_throttle_swaprate(page, gfp_mask);
}
#else #else
static inline void cgroup_throttle_swaprate(struct page *page, gfp_t gfp_mask) static inline void cgroup_throttle_swaprate(struct page *page, gfp_t gfp_mask)
{ {
@@ -704,8 +710,22 @@ static inline void cgroup_throttle_swaprate(struct page *page, gfp_t gfp_mask)
#ifdef CONFIG_MEMCG_SWAP #ifdef CONFIG_MEMCG_SWAP
extern void mem_cgroup_swapout(struct page *page, swp_entry_t entry); extern void mem_cgroup_swapout(struct page *page, swp_entry_t entry);
extern int mem_cgroup_try_charge_swap(struct page *page, swp_entry_t entry); extern int __mem_cgroup_try_charge_swap(struct page *page, swp_entry_t entry);
extern void mem_cgroup_uncharge_swap(swp_entry_t entry, unsigned int nr_pages); static inline int mem_cgroup_try_charge_swap(struct page *page, swp_entry_t entry)
{
if (mem_cgroup_disabled())
return 0;
return __mem_cgroup_try_charge_swap(page, entry);
}
extern void __mem_cgroup_uncharge_swap(swp_entry_t entry, unsigned int nr_pages);
static inline void mem_cgroup_uncharge_swap(swp_entry_t entry, unsigned int nr_pages)
{
if (mem_cgroup_disabled())
return;
__mem_cgroup_uncharge_swap(entry, nr_pages);
}
extern long mem_cgroup_get_nr_swap_pages(struct mem_cgroup *memcg); extern long mem_cgroup_get_nr_swap_pages(struct mem_cgroup *memcg);
extern bool mem_cgroup_swap_full(struct page *page); extern bool mem_cgroup_swap_full(struct page *page);
#else #else

View File

@@ -54,14 +54,14 @@ DECLARE_HOOK(android_vh_meminfo_proc_show,
DECLARE_HOOK(android_vh_exit_mm, DECLARE_HOOK(android_vh_exit_mm,
TP_PROTO(struct mm_struct *mm), TP_PROTO(struct mm_struct *mm),
TP_ARGS(mm)); TP_ARGS(mm));
DECLARE_HOOK(android_vh_get_unmapped_area_from_anti_fragment_pool, DECLARE_HOOK(android_vh_get_from_fragment_pool,
TP_PROTO(struct mm_struct *mm, struct vm_unmapped_area_info *info, TP_PROTO(struct mm_struct *mm, struct vm_unmapped_area_info *info,
unsigned long *addr), unsigned long *addr),
TP_ARGS(mm, info, addr)); TP_ARGS(mm, info, addr));
DECLARE_HOOK(android_vh_exclude_reserved_zone, DECLARE_HOOK(android_vh_exclude_reserved_zone,
TP_PROTO(struct mm_struct *mm, struct vm_unmapped_area_info *info), TP_PROTO(struct mm_struct *mm, struct vm_unmapped_area_info *info),
TP_ARGS(mm, info)); TP_ARGS(mm, info));
DECLARE_HOOK(android_vh_get_unmapped_area_include_reserved_zone, DECLARE_HOOK(android_vh_include_reserved_zone,
TP_PROTO(struct mm_struct *mm, struct vm_unmapped_area_info *info, TP_PROTO(struct mm_struct *mm, struct vm_unmapped_area_info *info,
unsigned long *addr), unsigned long *addr),
TP_ARGS(mm, info, addr)); TP_ARGS(mm, info, addr));
@@ -97,6 +97,26 @@ DECLARE_HOOK(android_vh_show_stack_hash,
DECLARE_HOOK(android_vh_save_track_hash, DECLARE_HOOK(android_vh_save_track_hash,
TP_PROTO(bool alloc, unsigned long p), TP_PROTO(bool alloc, unsigned long p),
TP_ARGS(alloc, p)); TP_ARGS(alloc, p));
struct mem_cgroup;
DECLARE_HOOK(android_vh_vmpressure,
TP_PROTO(struct mem_cgroup *memcg, bool *bypass),
TP_ARGS(memcg, bypass));
DECLARE_HOOK(android_vh_mem_cgroup_alloc,
TP_PROTO(struct mem_cgroup *memcg),
TP_ARGS(memcg));
DECLARE_HOOK(android_vh_mem_cgroup_free,
TP_PROTO(struct mem_cgroup *memcg),
TP_ARGS(memcg));
DECLARE_HOOK(android_vh_mem_cgroup_id_remove,
TP_PROTO(struct mem_cgroup *memcg),
TP_ARGS(memcg));
struct cgroup_subsys_state;
DECLARE_HOOK(android_vh_mem_cgroup_css_online,
TP_PROTO(struct cgroup_subsys_state *css, struct mem_cgroup *memcg),
TP_ARGS(css, memcg));
DECLARE_HOOK(android_vh_mem_cgroup_css_offline,
TP_PROTO(struct cgroup_subsys_state *css, struct mem_cgroup *memcg),
TP_ARGS(css, memcg));
/* macro versions of hooks are no longer required */ /* macro versions of hooks are no longer required */
#endif /* _TRACE_HOOK_MM_H */ #endif /* _TRACE_HOOK_MM_H */

25
include/trace/hooks/net.h Normal file
View File

@@ -0,0 +1,25 @@
/* SPDX-License-Identifier: GPL-2.0 */
#undef TRACE_SYSTEM
#define TRACE_SYSTEM net
#define TRACE_INCLUDE_PATH trace/hooks
#if !defined(_TRACE_HOOK_NET_VH_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_HOOK_NET_VH_H
#include <linux/tracepoint.h>
#include <trace/hooks/vendor_hooks.h>
struct packet_type;
struct list_head;
struct sk_buff;
DECLARE_HOOK(android_vh_ptype_head,
TP_PROTO(const struct packet_type *pt, struct list_head *vendor_pt),
TP_ARGS(pt, vendor_pt));
DECLARE_HOOK(android_vh_kfree_skb,
TP_PROTO(struct sk_buff *skb), TP_ARGS(skb));
/* macro versions of hooks are no longer required */
#endif /* _TRACE_HOOK_NET_VH_H */
/* This part must be outside protection */
#include <trace/define_trace.h>

View File

@@ -0,0 +1,17 @@
/* SPDX-License-Identifier: GPL-2.0 */
#undef TRACE_SYSTEM
#define TRACE_SYSTEM shmem_fs
#undef TRACE_INCLUDE_PATH
#define TRACE_INCLUDE_PATH trace/hooks
#if !defined(_TRACE_HOOK_SHMEM_FS_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_HOOK_SHMEM_FS_H
#include <linux/tracepoint.h>
#include <trace/hooks/vendor_hooks.h>
struct page;
DECLARE_HOOK(android_vh_shmem_alloc_page,
TP_PROTO(struct page **page),
TP_ARGS(page));
#endif /* _TRACE_HOOK_SHMEM_FS_H */
/* This part must be outside protection */
#include <trace/define_trace.h>

View File

@@ -0,0 +1,31 @@
/* SPDX-License-Identifier: GPL-2.0 */
#undef TRACE_SYSTEM
#define TRACE_SYSTEM syscall_check
#define TRACE_INCLUDE_PATH trace/hooks
#if !defined(_TRACE_HOOK_SYSCALL_CHECK_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_HOOK_SYSCALL_CHECK_H
#include <linux/tracepoint.h>
#include <trace/hooks/vendor_hooks.h>
/*
* Following tracepoints are not exported in tracefs and provide a
* mechanism for vendor modules to hook and extend functionality
*/
struct file;
union bpf_attr;
DECLARE_HOOK(android_vh_check_mmap_file,
TP_PROTO(const struct file *file, unsigned long prot,
unsigned long flag, unsigned long ret),
TP_ARGS(file, prot, flag, ret));
DECLARE_HOOK(android_vh_check_file_open,
TP_PROTO(const struct file *file),
TP_ARGS(file));
DECLARE_HOOK(android_vh_check_bpf_syscall,
TP_PROTO(int cmd, const union bpf_attr *attr, unsigned int size),
TP_ARGS(cmd, attr, size));
#endif /* _TRACE_HOOK_SYSCALL_CHECK_H */
/* This part must be outside protection */
#include <trace/define_trace.h>

View File

@@ -55,6 +55,9 @@ DECLARE_HOOK(android_vh_ufs_update_sdev,
TP_PROTO(struct scsi_device *sdev), TP_PROTO(struct scsi_device *sdev),
TP_ARGS(sdev)); TP_ARGS(sdev));
DECLARE_HOOK(android_vh_ufs_clock_scaling,
TP_PROTO(struct ufs_hba *hba, bool *force_out, bool *force_scaling, bool *scale_up),
TP_ARGS(hba, force_out, force_scaling, scale_up));
#endif /* _TRACE_HOOK_UFSHCD_H */ #endif /* _TRACE_HOOK_UFSHCD_H */
/* This part must be outside protection */ /* This part must be outside protection */
#include <trace/define_trace.h> #include <trace/define_trace.h>

27
include/trace/hooks/usb.h Normal file
View File

@@ -0,0 +1,27 @@
/* SPDX-License-Identifier: GPL-2.0 */
#undef TRACE_SYSTEM
#define TRACE_SYSTEM usb
#undef TRACE_INCLUDE_PATH
#define TRACE_INCLUDE_PATH trace/hooks
#if !defined(_TRACE_HOOK_USB_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_HOOK_USB_H
#include <linux/tracepoint.h>
#include <linux/usb.h>
#include <trace/hooks/vendor_hooks.h>
/*
* Following tracepoints are not exported in tracefs and provide a
* mechanism for vendor modules to hook and extend functionality
*/
DECLARE_HOOK(android_vh_usb_dev_suspend,
TP_PROTO(struct usb_device *udev, pm_message_t msg, int *bypass),
TP_ARGS(udev, msg, bypass));
DECLARE_HOOK(android_vh_usb_dev_resume,
TP_PROTO(struct usb_device *udev, pm_message_t msg, int *bypass),
TP_ARGS(udev, msg, bypass));
#endif /* _TRACE_HOOK_USB_H */
/* This part must be outside protection */
#include <trace/define_trace.h>

View File

@@ -32,6 +32,8 @@
#include <linux/bpf-netns.h> #include <linux/bpf-netns.h>
#include <linux/rcupdate_trace.h> #include <linux/rcupdate_trace.h>
#include <trace/hooks/syscall_check.h>
#define IS_FD_ARRAY(map) ((map)->map_type == BPF_MAP_TYPE_PERF_EVENT_ARRAY || \ #define IS_FD_ARRAY(map) ((map)->map_type == BPF_MAP_TYPE_PERF_EVENT_ARRAY || \
(map)->map_type == BPF_MAP_TYPE_CGROUP_ARRAY || \ (map)->map_type == BPF_MAP_TYPE_CGROUP_ARRAY || \
(map)->map_type == BPF_MAP_TYPE_ARRAY_OF_MAPS) (map)->map_type == BPF_MAP_TYPE_ARRAY_OF_MAPS)
@@ -4374,6 +4376,8 @@ SYSCALL_DEFINE3(bpf, int, cmd, union bpf_attr __user *, uattr, unsigned int, siz
if (copy_from_user(&attr, uattr, size) != 0) if (copy_from_user(&attr, uattr, size) != 0)
return -EFAULT; return -EFAULT;
trace_android_vh_check_bpf_syscall(cmd, &attr, size);
err = security_bpf(cmd, &attr, size); err = security_bpf(cmd, &attr, size);
if (err < 0) if (err < 0)
return err; return err;

View File

@@ -4123,6 +4123,7 @@ int cgroup_add_legacy_cftypes(struct cgroup_subsys *ss, struct cftype *cfts)
cft->flags |= __CFTYPE_NOT_ON_DFL; cft->flags |= __CFTYPE_NOT_ON_DFL;
return cgroup_add_cftypes(ss, cfts); return cgroup_add_cftypes(ss, cfts);
} }
EXPORT_SYMBOL_GPL(cgroup_add_legacy_cftypes);
/** /**
* cgroup_file_notify - generate a file modified event for a cgroup_file * cgroup_file_notify - generate a file modified event for a cgroup_file

View File

@@ -121,6 +121,8 @@
*/ */
#define MAX_THREADS FUTEX_TID_MASK #define MAX_THREADS FUTEX_TID_MASK
EXPORT_TRACEPOINT_SYMBOL_GPL(task_newtask);
/* /*
* Protected counters by write_lock_irq(&tasklist_lock) * Protected counters by write_lock_irq(&tasklist_lock)
*/ */

View File

@@ -967,6 +967,27 @@ void wake_up_all_idle_cpus(void)
} }
EXPORT_SYMBOL_GPL(wake_up_all_idle_cpus); EXPORT_SYMBOL_GPL(wake_up_all_idle_cpus);
/**
* wake_up_all_online_idle_cpus - break all online cpus out of idle
* wake_up_all_online_idle_cpus try to break all online cpus which is in idle
* state even including idle polling cpus, for non-idle cpus, we will do nothing
* for them.
*/
void wake_up_all_online_idle_cpus(void)
{
int cpu;
preempt_disable();
for_each_online_cpu(cpu) {
if (cpu == smp_processor_id())
continue;
wake_up_if_idle(cpu);
}
preempt_enable();
}
EXPORT_SYMBOL_GPL(wake_up_all_online_idle_cpus);
/** /**
* smp_call_on_cpu - Call a function on a specific cpu * smp_call_on_cpu - Call a function on a specific cpu
* *

View File

@@ -38,12 +38,8 @@ EXPORT_SYMBOL_GPL(debug_locks_silent);
*/ */
int debug_locks_off(void) int debug_locks_off(void)
{ {
if (debug_locks && __debug_locks_off()) { if (debug_locks && __debug_locks_off() && !debug_locks_silent)
if (!debug_locks_silent) { return 1;
console_verbose();
return 1;
}
}
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(debug_locks_off); EXPORT_SYMBOL_GPL(debug_locks_off);

View File

@@ -67,6 +67,7 @@
#include <linux/uaccess.h> #include <linux/uaccess.h>
#include <trace/events/vmscan.h> #include <trace/events/vmscan.h>
#include <trace/hooks/mm.h>
struct cgroup_subsys memory_cgrp_subsys __read_mostly; struct cgroup_subsys memory_cgrp_subsys __read_mostly;
EXPORT_SYMBOL(memory_cgrp_subsys); EXPORT_SYMBOL(memory_cgrp_subsys);
@@ -5148,6 +5149,7 @@ static DEFINE_IDR(mem_cgroup_idr);
static void mem_cgroup_id_remove(struct mem_cgroup *memcg) static void mem_cgroup_id_remove(struct mem_cgroup *memcg)
{ {
if (memcg->id.id > 0) { if (memcg->id.id > 0) {
trace_android_vh_mem_cgroup_id_remove(memcg);
idr_remove(&mem_cgroup_idr, memcg->id.id); idr_remove(&mem_cgroup_idr, memcg->id.id);
memcg->id.id = 0; memcg->id.id = 0;
} }
@@ -5185,6 +5187,7 @@ struct mem_cgroup *mem_cgroup_from_id(unsigned short id)
WARN_ON_ONCE(!rcu_read_lock_held()); WARN_ON_ONCE(!rcu_read_lock_held());
return idr_find(&mem_cgroup_idr, id); return idr_find(&mem_cgroup_idr, id);
} }
EXPORT_SYMBOL_GPL(mem_cgroup_from_id);
static int alloc_mem_cgroup_per_node_info(struct mem_cgroup *memcg, int node) static int alloc_mem_cgroup_per_node_info(struct mem_cgroup *memcg, int node)
{ {
@@ -5244,6 +5247,7 @@ static void __mem_cgroup_free(struct mem_cgroup *memcg)
{ {
int node; int node;
trace_android_vh_mem_cgroup_free(memcg);
for_each_node(node) for_each_node(node)
free_mem_cgroup_per_node_info(memcg, node); free_mem_cgroup_per_node_info(memcg, node);
free_percpu(memcg->vmstats_percpu); free_percpu(memcg->vmstats_percpu);
@@ -5327,6 +5331,7 @@ static struct mem_cgroup *mem_cgroup_alloc(void)
memcg->deferred_split_queue.split_queue_len = 0; memcg->deferred_split_queue.split_queue_len = 0;
#endif #endif
idr_replace(&mem_cgroup_idr, memcg, memcg->id.id); idr_replace(&mem_cgroup_idr, memcg, memcg->id.id);
trace_android_vh_mem_cgroup_alloc(memcg);
return memcg; return memcg;
fail: fail:
mem_cgroup_id_remove(memcg); mem_cgroup_id_remove(memcg);
@@ -5416,6 +5421,7 @@ static int mem_cgroup_css_online(struct cgroup_subsys_state *css)
/* Online state pins memcg ID, memcg ID pins CSS */ /* Online state pins memcg ID, memcg ID pins CSS */
refcount_set(&memcg->id.ref, 1); refcount_set(&memcg->id.ref, 1);
css_get(css); css_get(css);
trace_android_vh_mem_cgroup_css_online(css, memcg);
return 0; return 0;
} }
@@ -5424,6 +5430,7 @@ static void mem_cgroup_css_offline(struct cgroup_subsys_state *css)
struct mem_cgroup *memcg = mem_cgroup_from_css(css); struct mem_cgroup *memcg = mem_cgroup_from_css(css);
struct mem_cgroup_event *event, *tmp; struct mem_cgroup_event *event, *tmp;
trace_android_vh_mem_cgroup_css_offline(css, memcg);
/* /*
* Unregister events and notify userspace. * Unregister events and notify userspace.
* Notify userspace about cgroup removing only after rmdir of cgroup * Notify userspace about cgroup removing only after rmdir of cgroup
@@ -6754,7 +6761,7 @@ void mem_cgroup_calculate_protection(struct mem_cgroup *root,
} }
/** /**
* mem_cgroup_charge - charge a newly allocated page to a cgroup * __mem_cgroup_charge - charge a newly allocated page to a cgroup
* @page: page to charge * @page: page to charge
* @mm: mm context of the victim * @mm: mm context of the victim
* @gfp_mask: reclaim mode * @gfp_mask: reclaim mode
@@ -6764,15 +6771,13 @@ void mem_cgroup_calculate_protection(struct mem_cgroup *root,
* *
* Returns 0 on success. Otherwise, an error code is returned. * Returns 0 on success. Otherwise, an error code is returned.
*/ */
int mem_cgroup_charge(struct page *page, struct mm_struct *mm, gfp_t gfp_mask) int __mem_cgroup_charge(struct page *page, struct mm_struct *mm,
gfp_t gfp_mask)
{ {
unsigned int nr_pages = thp_nr_pages(page); unsigned int nr_pages = thp_nr_pages(page);
struct mem_cgroup *memcg = NULL; struct mem_cgroup *memcg = NULL;
int ret = 0; int ret = 0;
if (mem_cgroup_disabled())
goto out;
if (PageSwapCache(page)) { if (PageSwapCache(page)) {
swp_entry_t ent = { .val = page_private(page), }; swp_entry_t ent = { .val = page_private(page), };
unsigned short id; unsigned short id;
@@ -6942,18 +6947,15 @@ static void uncharge_list(struct list_head *page_list)
} }
/** /**
* mem_cgroup_uncharge - uncharge a page * __mem_cgroup_uncharge - uncharge a page
* @page: page to uncharge * @page: page to uncharge
* *
* Uncharge a page previously charged with mem_cgroup_charge(). * Uncharge a page previously charged with __mem_cgroup_charge().
*/ */
void mem_cgroup_uncharge(struct page *page) void __mem_cgroup_uncharge(struct page *page)
{ {
struct uncharge_gather ug; struct uncharge_gather ug;
if (mem_cgroup_disabled())
return;
/* Don't touch page->lru of any random page, pre-check: */ /* Don't touch page->lru of any random page, pre-check: */
if (!page->mem_cgroup) if (!page->mem_cgroup)
return; return;
@@ -6964,17 +6966,14 @@ void mem_cgroup_uncharge(struct page *page)
} }
/** /**
* mem_cgroup_uncharge_list - uncharge a list of page * __mem_cgroup_uncharge_list - uncharge a list of page
* @page_list: list of pages to uncharge * @page_list: list of pages to uncharge
* *
* Uncharge a list of pages previously charged with * Uncharge a list of pages previously charged with
* mem_cgroup_charge(). * __mem_cgroup_charge().
*/ */
void mem_cgroup_uncharge_list(struct list_head *page_list) void __mem_cgroup_uncharge_list(struct list_head *page_list)
{ {
if (mem_cgroup_disabled())
return;
if (!list_empty(page_list)) if (!list_empty(page_list))
uncharge_list(page_list); uncharge_list(page_list);
} }
@@ -7201,6 +7200,9 @@ void mem_cgroup_swapout(struct page *page, swp_entry_t entry)
VM_BUG_ON_PAGE(PageLRU(page), page); VM_BUG_ON_PAGE(PageLRU(page), page);
VM_BUG_ON_PAGE(page_count(page), page); VM_BUG_ON_PAGE(page_count(page), page);
if (mem_cgroup_disabled())
return;
if (cgroup_subsys_on_dfl(memory_cgrp_subsys)) if (cgroup_subsys_on_dfl(memory_cgrp_subsys))
return; return;
@@ -7250,7 +7252,7 @@ void mem_cgroup_swapout(struct page *page, swp_entry_t entry)
} }
/** /**
* mem_cgroup_try_charge_swap - try charging swap space for a page * __mem_cgroup_try_charge_swap - try charging swap space for a page
* @page: page being added to swap * @page: page being added to swap
* @entry: swap entry to charge * @entry: swap entry to charge
* *
@@ -7258,7 +7260,7 @@ void mem_cgroup_swapout(struct page *page, swp_entry_t entry)
* *
* Returns 0 on success, -ENOMEM on failure. * Returns 0 on success, -ENOMEM on failure.
*/ */
int mem_cgroup_try_charge_swap(struct page *page, swp_entry_t entry) int __mem_cgroup_try_charge_swap(struct page *page, swp_entry_t entry)
{ {
unsigned int nr_pages = thp_nr_pages(page); unsigned int nr_pages = thp_nr_pages(page);
struct page_counter *counter; struct page_counter *counter;
@@ -7300,11 +7302,11 @@ int mem_cgroup_try_charge_swap(struct page *page, swp_entry_t entry)
} }
/** /**
* mem_cgroup_uncharge_swap - uncharge swap space * __mem_cgroup_uncharge_swap - uncharge swap space
* @entry: swap entry to uncharge * @entry: swap entry to uncharge
* @nr_pages: the amount of swap space to uncharge * @nr_pages: the amount of swap space to uncharge
*/ */
void mem_cgroup_uncharge_swap(swp_entry_t entry, unsigned int nr_pages) void __mem_cgroup_uncharge_swap(swp_entry_t entry, unsigned int nr_pages)
{ {
struct mem_cgroup *memcg; struct mem_cgroup *memcg;
unsigned short id; unsigned short id;

View File

@@ -2101,7 +2101,7 @@ static unsigned long unmapped_area_topdown(struct vm_unmapped_area_info *info)
if (length < info->length) if (length < info->length)
return -ENOMEM; return -ENOMEM;
trace_android_vh_get_unmapped_area_from_anti_fragment_pool(mm, info, &addr); trace_android_vh_get_from_fragment_pool(mm, info, &addr);
if (addr) if (addr)
return addr; return addr;
@@ -2214,6 +2214,7 @@ unsigned long vm_unmapped_area(struct vm_unmapped_area_info *info)
trace_vm_unmapped_area(addr, info); trace_vm_unmapped_area(addr, info);
return addr; return addr;
} }
EXPORT_SYMBOL_GPL(vm_unmapped_area);
#ifndef arch_get_mmap_end #ifndef arch_get_mmap_end
#define arch_get_mmap_end(addr) (TASK_SIZE) #define arch_get_mmap_end(addr) (TASK_SIZE)
@@ -2324,7 +2325,7 @@ arch_get_unmapped_area_topdown(struct file *filp, unsigned long addr,
addr = vm_unmapped_area(&info); addr = vm_unmapped_area(&info);
} }
trace_android_vh_get_unmapped_area_include_reserved_zone(mm, &info, &addr); trace_android_vh_include_reserved_zone(mm, &info, &addr);
return addr; return addr;
} }

View File

@@ -308,6 +308,10 @@ int test_pages_isolated(unsigned long start_pfn, unsigned long end_pfn,
spin_unlock_irqrestore(&zone->lock, flags); spin_unlock_irqrestore(&zone->lock, flags);
trace_test_pages_isolated(start_pfn, end_pfn, pfn); trace_test_pages_isolated(start_pfn, end_pfn, pfn);
if (pfn < end_pfn) {
page_pinner_failure_detect(pfn_to_page(pfn));
return -EBUSY;
}
return pfn < end_pfn ? -EBUSY : 0; return 0;
} }

View File

@@ -15,7 +15,7 @@
#include "internal.h" #include "internal.h"
#define PAGE_PINNER_STACK_DEPTH 16 #define PAGE_PINNER_STACK_DEPTH 16
#define LONTERM_PIN_BUCKETS 4096 #define LONGTERM_PIN_BUCKETS 4096
struct page_pinner { struct page_pinner {
depot_stack_handle_t handle; depot_stack_handle_t handle;
@@ -25,16 +25,23 @@ struct page_pinner {
struct captured_pinner { struct captured_pinner {
depot_stack_handle_t handle; depot_stack_handle_t handle;
s64 ts_usec; union {
int page_mt; s64 ts_usec;
unsigned long page_flags; s64 elapsed;
};
/* struct page fields */
unsigned long pfn; unsigned long pfn;
int count;
int mapcount;
struct address_space *mapping;
unsigned long flags;
}; };
struct longterm_pinner { struct longterm_pinner {
spinlock_t lock; spinlock_t lock;
unsigned int index; unsigned int index;
struct captured_pinner pinner[LONTERM_PIN_BUCKETS]; struct captured_pinner pinner[LONGTERM_PIN_BUCKETS];
}; };
static struct longterm_pinner lt_pinner = { static struct longterm_pinner lt_pinner = {
@@ -111,12 +118,23 @@ static noinline depot_stack_handle_t save_stack(gfp_t flags)
return handle; return handle;
} }
static void check_lonterm_pin(struct page_pinner *page_pinner, static void capture_page_state(struct page *page,
struct captured_pinner *record)
{
record->flags = page->flags;
record->mapping = page_mapping(page);
record->pfn = page_to_pfn(page);
record->count = page_count(page);
record->mapcount = page_mapcount(page);
}
static void check_longterm_pin(struct page_pinner *page_pinner,
struct page *page) struct page *page)
{ {
s64 now, delta = 0; s64 now, delta = 0;
unsigned long flags; unsigned long flags;
unsigned int idx; unsigned int idx;
struct captured_pinner record;
now = ktime_to_us(ktime_get_boottime()); now = ktime_to_us(ktime_get_boottime());
@@ -127,17 +145,15 @@ static void check_lonterm_pin(struct page_pinner *page_pinner,
if (delta <= threshold_usec) if (delta <= threshold_usec)
return; return;
record.handle = page_pinner->handle;
record.elapsed = delta;
capture_page_state(page, &record);
spin_lock_irqsave(&lt_pinner.lock, flags); spin_lock_irqsave(&lt_pinner.lock, flags);
idx = lt_pinner.index++; idx = lt_pinner.index++;
lt_pinner.index %= LONTERM_PIN_BUCKETS; lt_pinner.index %= LONGTERM_PIN_BUCKETS;
lt_pinner.pinner[idx] = record;
lt_pinner.pinner[idx].handle = page_pinner->handle;
lt_pinner.pinner[idx].ts_usec = delta;
lt_pinner.pinner[idx].page_flags = page->flags;
lt_pinner.pinner[idx].page_mt = get_pageblock_migratetype(page);
lt_pinner.pinner[idx].pfn = page_to_pfn(page);
spin_unlock_irqrestore(&lt_pinner.lock, flags); spin_unlock_irqrestore(&lt_pinner.lock, flags);
} }
void __reset_page_pinner(struct page *page, unsigned int order, bool free) void __reset_page_pinner(struct page *page, unsigned int order, bool free)
@@ -151,18 +167,19 @@ void __reset_page_pinner(struct page *page, unsigned int order, bool free)
return; return;
for (i = 0; i < (1 << order); i++) { for (i = 0; i < (1 << order); i++) {
if (!test_bit(PAGE_EXT_GET, &page_ext->flags)) if (!test_bit(PAGE_EXT_GET, &page_ext->flags) &&
!test_bit(PAGE_EXT_PINNER_MIGRATION_FAILED,
&page_ext->flags))
continue; continue;
page_pinner = get_page_pinner(page_ext); page_pinner = get_page_pinner(page_ext);
if (free) { if (free) {
WARN_ON_ONCE(atomic_read(&page_pinner->count)); /* record page free call path */
__page_pinner_migration_failed(page);
atomic_set(&page_pinner->count, 0); atomic_set(&page_pinner->count, 0);
__clear_bit(PAGE_EXT_PINNER_MIGRATION_FAILED, &page_ext->flags); __clear_bit(PAGE_EXT_PINNER_MIGRATION_FAILED, &page_ext->flags);
} else { } else {
WARN_ON_ONCE(atomic_dec_if_positive( check_longterm_pin(page_pinner, page);
&page_pinner->count) < 0);
check_lonterm_pin(page_pinner, page);
} }
clear_bit(PAGE_EXT_GET, &page_ext->flags); clear_bit(PAGE_EXT_GET, &page_ext->flags);
page_ext = page_ext_next(page_ext); page_ext = page_ext_next(page_ext);
@@ -200,9 +217,7 @@ noinline void __set_page_pinner(struct page *page, unsigned int order)
} }
static ssize_t static ssize_t
print_page_pinner(char __user *buf, size_t count, unsigned long pfn, print_page_pinner(bool longterm, char __user *buf, size_t count, struct captured_pinner *record)
int pageblock_mt, unsigned long page_flags, s64 ts_usec,
depot_stack_handle_t handle, int shared_count)
{ {
int ret; int ret;
unsigned long *entries; unsigned long *entries;
@@ -214,25 +229,34 @@ print_page_pinner(char __user *buf, size_t count, unsigned long pfn,
if (!kbuf) if (!kbuf)
return -ENOMEM; return -ENOMEM;
ret = snprintf(kbuf, count, if (longterm) {
"Page pinned ts %lld us count %d\n", ret = snprintf(kbuf, count, "Page pinned for %lld us\n",
ts_usec, shared_count); record->elapsed);
} else {
s64 ts_usec = record->ts_usec;
unsigned long rem_usec = do_div(ts_usec, 1000000);
ret = snprintf(kbuf, count,
"Page pinned ts [%5lu.%06lu]\n",
(unsigned long)ts_usec, rem_usec);
}
if (ret >= count) if (ret >= count)
goto err; goto err;
/* Print information relevant to grouping pages by mobility */ /* Print information relevant to grouping pages by mobility */
ret += snprintf(kbuf + ret, count - ret, ret += snprintf(kbuf + ret, count - ret,
"PFN %lu Block %lu type %s Flags %#lx(%pGp)\n", "PFN 0x%lx Block %lu count %d mapcount %d mapping %pS Flags %#lx(%pGp)\n",
pfn, record->pfn,
pfn >> pageblock_order, record->pfn >> pageblock_order,
migratetype_names[pageblock_mt], record->count, record->mapcount,
page_flags, &page_flags); record->mapping,
record->flags, &record->flags);
if (ret >= count) if (ret >= count)
goto err; goto err;
nr_entries = stack_depot_fetch(handle, &entries); nr_entries = stack_depot_fetch(record->handle, &entries);
ret += stack_trace_snprint(kbuf + ret, count - ret, entries, ret += stack_trace_snprint(kbuf + ret, count - ret, entries,
nr_entries, 0); nr_entries, 0);
if (ret >= count) if (ret >= count)
@@ -263,6 +287,8 @@ void __dump_page_pinner(struct page *page)
int pageblock_mt; int pageblock_mt;
unsigned long pfn; unsigned long pfn;
int count; int count;
unsigned long rem_usec;
s64 ts_usec;
if (unlikely(!page_ext)) { if (unlikely(!page_ext)) {
pr_alert("There is not page extension available.\n"); pr_alert("There is not page extension available.\n");
@@ -278,9 +304,10 @@ void __dump_page_pinner(struct page *page)
} }
pfn = page_to_pfn(page); pfn = page_to_pfn(page);
pr_alert("page last pinned ts %lld count %d\n", ts_usec = page_pinner->ts_usec;
page_pinner->ts_usec, rem_usec = do_div(ts_usec, 1000000);
count); pr_alert("page last pinned %5lu.%06lu] count %d\n",
(unsigned long)ts_usec, rem_usec, count);
pageblock_mt = get_pageblock_migratetype(page); pageblock_mt = get_pageblock_migratetype(page);
pr_alert("PFN %lu Block %lu type %s Flags %#lx(%pGp)\n", pr_alert("PFN %lu Block %lu type %s Flags %#lx(%pGp)\n",
@@ -302,7 +329,7 @@ void __page_pinner_migration_failed(struct page *page)
{ {
struct page_ext *page_ext = lookup_page_ext(page); struct page_ext *page_ext = lookup_page_ext(page);
struct page_pinner *page_pinner; struct page_pinner *page_pinner;
depot_stack_handle_t handle; struct captured_pinner record;
unsigned long flags; unsigned long flags;
unsigned int idx; unsigned int idx;
@@ -313,17 +340,14 @@ void __page_pinner_migration_failed(struct page *page)
if (!test_bit(PAGE_EXT_PINNER_MIGRATION_FAILED, &page_ext->flags)) if (!test_bit(PAGE_EXT_PINNER_MIGRATION_FAILED, &page_ext->flags))
return; return;
handle = save_stack(GFP_NOWAIT|__GFP_NOWARN); record.handle = save_stack(GFP_NOWAIT|__GFP_NOWARN);
record.ts_usec = ktime_to_us(ktime_get_boottime());
capture_page_state(page, &record);
spin_lock_irqsave(&acf_pinner.lock, flags); spin_lock_irqsave(&acf_pinner.lock, flags);
idx = acf_pinner.index++; idx = acf_pinner.index++;
acf_pinner.index %= LONTERM_PIN_BUCKETS; acf_pinner.index %= LONGTERM_PIN_BUCKETS;
acf_pinner.pinner[idx] = record;
acf_pinner.pinner[idx].handle = handle;
acf_pinner.pinner[idx].ts_usec = ktime_to_us(ktime_get_boottime());
acf_pinner.pinner[idx].page_flags = page->flags;
acf_pinner.pinner[idx].page_mt = get_pageblock_migratetype(page);
acf_pinner.pinner[idx].pfn = page_to_pfn(page);
spin_unlock_irqrestore(&acf_pinner.lock, flags); spin_unlock_irqrestore(&acf_pinner.lock, flags);
} }
EXPORT_SYMBOL(__page_pinner_migration_failed); EXPORT_SYMBOL(__page_pinner_migration_failed);
@@ -341,6 +365,7 @@ void __page_pinner_mark_migration_failed_pages(struct list_head *page_list)
if (unlikely(!page_ext)) if (unlikely(!page_ext))
continue; continue;
__set_bit(PAGE_EXT_PINNER_MIGRATION_FAILED, &page_ext->flags); __set_bit(PAGE_EXT_PINNER_MIGRATION_FAILED, &page_ext->flags);
__page_pinner_migration_failed(page);
} }
} }
@@ -355,7 +380,7 @@ read_longterm_page_pinner(struct file *file, char __user *buf, size_t count,
if (!static_branch_unlikely(&page_pinner_inited)) if (!static_branch_unlikely(&page_pinner_inited))
return -EINVAL; return -EINVAL;
if (*ppos >= LONTERM_PIN_BUCKETS) if (*ppos >= LONGTERM_PIN_BUCKETS)
return 0; return 0;
i = *ppos; i = *ppos;
@@ -365,17 +390,15 @@ read_longterm_page_pinner(struct file *file, char __user *buf, size_t count,
* reading the records in the reverse order with newest one * reading the records in the reverse order with newest one
* being read first followed by older ones * being read first followed by older ones
*/ */
idx = (lt_pinner.index - 1 - i + LONTERM_PIN_BUCKETS) % idx = (lt_pinner.index - 1 - i + LONGTERM_PIN_BUCKETS) %
LONTERM_PIN_BUCKETS; LONGTERM_PIN_BUCKETS;
spin_lock_irqsave(&lt_pinner.lock, flags); spin_lock_irqsave(&lt_pinner.lock, flags);
record = lt_pinner.pinner[idx]; record = lt_pinner.pinner[idx];
spin_unlock_irqrestore(&lt_pinner.lock, flags); spin_unlock_irqrestore(&lt_pinner.lock, flags);
if (!record.handle) if (!record.handle)
return 0; return 0;
return print_page_pinner(buf, count, record.pfn, record.page_mt, return print_page_pinner(true, buf, count, &record);
record.page_flags, record.ts_usec,
record.handle, 0);
} }
static const struct file_operations proc_longterm_pinner_operations = { static const struct file_operations proc_longterm_pinner_operations = {
@@ -392,7 +415,7 @@ static ssize_t read_alloc_contig_failed(struct file *file, char __user *buf,
if (!static_branch_unlikely(&failure_tracking)) if (!static_branch_unlikely(&failure_tracking))
return -EINVAL; return -EINVAL;
if (*ppos >= LONTERM_PIN_BUCKETS) if (*ppos >= LONGTERM_PIN_BUCKETS)
return 0; return 0;
i = *ppos; i = *ppos;
@@ -402,8 +425,8 @@ static ssize_t read_alloc_contig_failed(struct file *file, char __user *buf,
* reading the records in the reverse order with newest one * reading the records in the reverse order with newest one
* being read first followed by older ones * being read first followed by older ones
*/ */
idx = (acf_pinner.index - 1 - i + LONTERM_PIN_BUCKETS) % idx = (acf_pinner.index - 1 - i + LONGTERM_PIN_BUCKETS) %
LONTERM_PIN_BUCKETS; LONGTERM_PIN_BUCKETS;
spin_lock_irqsave(&acf_pinner.lock, flags); spin_lock_irqsave(&acf_pinner.lock, flags);
record = acf_pinner.pinner[idx]; record = acf_pinner.pinner[idx];
@@ -411,9 +434,7 @@ static ssize_t read_alloc_contig_failed(struct file *file, char __user *buf,
if (!record.handle) if (!record.handle)
return 0; return 0;
return print_page_pinner(buf, count, record.pfn, record.page_mt, return print_page_pinner(false, buf, count, &record);
record.page_flags, record.ts_usec,
record.handle, 0);
} }
static const struct file_operations proc_alloc_contig_failed_operations = { static const struct file_operations proc_alloc_contig_failed_operations = {
@@ -428,7 +449,7 @@ static int pp_threshold_set(void *data, unsigned long long val)
spin_lock_irqsave(&lt_pinner.lock, flags); spin_lock_irqsave(&lt_pinner.lock, flags);
memset(lt_pinner.pinner, 0, memset(lt_pinner.pinner, 0,
sizeof(struct captured_pinner) * LONTERM_PIN_BUCKETS); sizeof(struct captured_pinner) * LONGTERM_PIN_BUCKETS);
lt_pinner.index = 0; lt_pinner.index = 0;
spin_unlock_irqrestore(&lt_pinner.lock, flags); spin_unlock_irqrestore(&lt_pinner.lock, flags);
return 0; return 0;

View File

@@ -38,9 +38,15 @@
#include <linux/hugetlb.h> #include <linux/hugetlb.h>
#include <linux/frontswap.h> #include <linux/frontswap.h>
#include <linux/fs_parser.h> #include <linux/fs_parser.h>
#include <linux/mm_inline.h>
#include <asm/tlbflush.h> /* for arch/microblaze update_mmu_cache() */ #include <asm/tlbflush.h> /* for arch/microblaze update_mmu_cache() */
#include "internal.h"
#undef CREATE_TRACE_POINTS
#include <trace/hooks/shmem_fs.h>
static struct vfsmount *shm_mnt; static struct vfsmount *shm_mnt;
#ifdef CONFIG_SHMEM #ifdef CONFIG_SHMEM
@@ -1559,7 +1565,11 @@ static struct page *shmem_alloc_page(gfp_t gfp,
struct shmem_inode_info *info, pgoff_t index) struct shmem_inode_info *info, pgoff_t index)
{ {
struct vm_area_struct pvma; struct vm_area_struct pvma;
struct page *page; struct page *page = NULL;
trace_android_vh_shmem_alloc_page(&page);
if (page)
return page;
shmem_pseudo_vma_init(&pvma, info, index); shmem_pseudo_vma_init(&pvma, info, index);
page = alloc_page_vma(gfp, &pvma, 0); page = alloc_page_vma(gfp, &pvma, 0);
@@ -4290,3 +4300,41 @@ void shmem_mark_page_lazyfree(struct page *page)
mark_page_lazyfree_movetail(page); mark_page_lazyfree_movetail(page);
} }
EXPORT_SYMBOL_GPL(shmem_mark_page_lazyfree); EXPORT_SYMBOL_GPL(shmem_mark_page_lazyfree);
int reclaim_shmem_address_space(struct address_space *mapping)
{
pgoff_t start = 0;
struct page *page;
LIST_HEAD(page_list);
int reclaimed;
XA_STATE(xas, &mapping->i_pages, start);
if (!shmem_mapping(mapping))
return -EINVAL;
lru_add_drain();
rcu_read_lock();
xas_for_each(&xas, page, ULONG_MAX) {
if (xas_retry(&xas, page))
continue;
if (xa_is_value(page))
continue;
if (isolate_lru_page(page))
continue;
list_add(&page->lru, &page_list);
inc_node_page_state(page, NR_ISOLATED_ANON +
page_is_file_lru(page));
if (need_resched()) {
xas_pause(&xas);
cond_resched_rcu();
}
}
rcu_read_unlock();
reclaimed = reclaim_pages_from_list(&page_list);
return reclaimed;
}
EXPORT_SYMBOL_GPL(reclaim_shmem_address_space);

View File

@@ -3813,7 +3813,7 @@ static void free_swap_count_continuations(struct swap_info_struct *si)
} }
#if defined(CONFIG_MEMCG) && defined(CONFIG_BLK_CGROUP) #if defined(CONFIG_MEMCG) && defined(CONFIG_BLK_CGROUP)
void cgroup_throttle_swaprate(struct page *page, gfp_t gfp_mask) void __cgroup_throttle_swaprate(struct page *page, gfp_t gfp_mask)
{ {
struct swap_info_struct *si, *next; struct swap_info_struct *si, *next;
int nid = page_to_nid(page); int nid = page_to_nid(page);

View File

@@ -27,6 +27,9 @@
#include <linux/uaccess.h> #include <linux/uaccess.h>
#include "internal.h" #include "internal.h"
#ifndef __GENKSYMS__
#include <trace/hooks/syscall_check.h>
#endif
/** /**
* kfree_const - conditionally free memory * kfree_const - conditionally free memory
@@ -354,6 +357,7 @@ unsigned long arch_mmap_rnd(void)
return rnd << PAGE_SHIFT; return rnd << PAGE_SHIFT;
} }
EXPORT_SYMBOL_GPL(arch_mmap_rnd);
static int mmap_is_legacy(struct rlimit *rlim_stack) static int mmap_is_legacy(struct rlimit *rlim_stack)
{ {
@@ -511,6 +515,7 @@ unsigned long vm_mmap_pgoff(struct file *file, unsigned long addr,
if (populate) if (populate)
mm_populate(ret, populate); mm_populate(ret, populate);
} }
trace_android_vh_check_mmap_file(file, prot, flag, ret);
return ret; return ret;
} }

View File

@@ -21,6 +21,8 @@
#include <linux/printk.h> #include <linux/printk.h>
#include <linux/vmpressure.h> #include <linux/vmpressure.h>
#include <trace/hooks/mm.h>
/* /*
* The window size (vmpressure_win) is the number of scanned pages before * The window size (vmpressure_win) is the number of scanned pages before
* we try to analyze scanned/reclaimed ratio. So the window is used as a * we try to analyze scanned/reclaimed ratio. So the window is used as a
@@ -240,7 +242,17 @@ static void vmpressure_work_fn(struct work_struct *work)
void vmpressure(gfp_t gfp, struct mem_cgroup *memcg, bool tree, void vmpressure(gfp_t gfp, struct mem_cgroup *memcg, bool tree,
unsigned long scanned, unsigned long reclaimed) unsigned long scanned, unsigned long reclaimed)
{ {
struct vmpressure *vmpr = memcg_to_vmpressure(memcg); struct vmpressure *vmpr;
bool bypass = false;
if (mem_cgroup_disabled())
return;
vmpr = memcg_to_vmpressure(memcg);
trace_android_vh_vmpressure(memcg, &bypass);
if (unlikely(bypass))
return;
/* /*
* Here we only want to account pressure that userland is able to * Here we only want to account pressure that userland is able to

View File

@@ -1562,6 +1562,36 @@ unsigned int reclaim_clean_pages_from_list(struct zone *zone,
return nr_reclaimed; return nr_reclaimed;
} }
int reclaim_pages_from_list(struct list_head *page_list)
{
struct scan_control sc = {
.gfp_mask = GFP_KERNEL,
.priority = DEF_PRIORITY,
.may_writepage = 1,
.may_unmap = 1,
.may_swap = 1,
};
unsigned long nr_reclaimed;
struct reclaim_stat dummy_stat;
struct page *page;
list_for_each_entry(page, page_list, lru)
ClearPageActive(page);
nr_reclaimed = shrink_page_list(page_list, NULL, &sc,
&dummy_stat, false);
while (!list_empty(page_list)) {
page = lru_to_page(page_list);
list_del(&page->lru);
dec_node_page_state(page, NR_ISOLATED_ANON +
page_is_file_lru(page));
putback_lru_page(page);
}
return nr_reclaimed;
}
/* /*
* Attempt to remove the specified page from its LRU. Only take this page * Attempt to remove the specified page from its LRU. Only take this page
* if it is of the appropriate PageActive status. Pages which are being * if it is of the appropriate PageActive status. Pages which are being
@@ -3389,6 +3419,7 @@ unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *memcg,
return nr_reclaimed; return nr_reclaimed;
} }
EXPORT_SYMBOL_GPL(try_to_free_mem_cgroup_pages);
#endif #endif
static void age_active_anon(struct pglist_data *pgdat, static void age_active_anon(struct pglist_data *pgdat,

View File

@@ -146,6 +146,7 @@
#include <net/devlink.h> #include <net/devlink.h>
#include <linux/pm_runtime.h> #include <linux/pm_runtime.h>
#include <linux/prandom.h> #include <linux/prandom.h>
#include <trace/hooks/net.h>
#include "net-sysfs.h" #include "net-sysfs.h"
@@ -510,6 +511,12 @@ static inline void netdev_set_addr_lockdep_class(struct net_device *dev)
static inline struct list_head *ptype_head(const struct packet_type *pt) static inline struct list_head *ptype_head(const struct packet_type *pt)
{ {
struct list_head vendor_pt = { .next = NULL, };
trace_android_vh_ptype_head(pt, &vendor_pt);
if (vendor_pt.next)
return vendor_pt.next;
if (pt->type == htons(ETH_P_ALL)) if (pt->type == htons(ETH_P_ALL))
return pt->dev ? &pt->dev->ptype_all : &ptype_all; return pt->dev ? &pt->dev->ptype_all : &ptype_all;
else else

View File

@@ -3244,9 +3244,6 @@ static int bpf_skb_proto_4_to_6(struct sk_buff *skb)
u32 off = skb_mac_header_len(skb); u32 off = skb_mac_header_len(skb);
int ret; int ret;
if (skb_is_gso(skb) && !skb_is_gso_tcp(skb))
return -ENOTSUPP;
ret = skb_cow(skb, len_diff); ret = skb_cow(skb, len_diff);
if (unlikely(ret < 0)) if (unlikely(ret < 0))
return ret; return ret;
@@ -3258,17 +3255,11 @@ static int bpf_skb_proto_4_to_6(struct sk_buff *skb)
if (skb_is_gso(skb)) { if (skb_is_gso(skb)) {
struct skb_shared_info *shinfo = skb_shinfo(skb); struct skb_shared_info *shinfo = skb_shinfo(skb);
/* SKB_GSO_TCPV4 needs to be changed into /* SKB_GSO_TCPV4 needs to be changed into SKB_GSO_TCPV6. */
* SKB_GSO_TCPV6.
*/
if (shinfo->gso_type & SKB_GSO_TCPV4) { if (shinfo->gso_type & SKB_GSO_TCPV4) {
shinfo->gso_type &= ~SKB_GSO_TCPV4; shinfo->gso_type &= ~SKB_GSO_TCPV4;
shinfo->gso_type |= SKB_GSO_TCPV6; shinfo->gso_type |= SKB_GSO_TCPV6;
} }
/* Header must be checked, and gso_segs recomputed. */
shinfo->gso_type |= SKB_GSO_DODGY;
shinfo->gso_segs = 0;
} }
skb->protocol = htons(ETH_P_IPV6); skb->protocol = htons(ETH_P_IPV6);
@@ -3283,9 +3274,6 @@ static int bpf_skb_proto_6_to_4(struct sk_buff *skb)
u32 off = skb_mac_header_len(skb); u32 off = skb_mac_header_len(skb);
int ret; int ret;
if (skb_is_gso(skb) && !skb_is_gso_tcp(skb))
return -ENOTSUPP;
ret = skb_unclone(skb, GFP_ATOMIC); ret = skb_unclone(skb, GFP_ATOMIC);
if (unlikely(ret < 0)) if (unlikely(ret < 0))
return ret; return ret;
@@ -3297,17 +3285,11 @@ static int bpf_skb_proto_6_to_4(struct sk_buff *skb)
if (skb_is_gso(skb)) { if (skb_is_gso(skb)) {
struct skb_shared_info *shinfo = skb_shinfo(skb); struct skb_shared_info *shinfo = skb_shinfo(skb);
/* SKB_GSO_TCPV6 needs to be changed into /* SKB_GSO_TCPV6 needs to be changed into SKB_GSO_TCPV4. */
* SKB_GSO_TCPV4.
*/
if (shinfo->gso_type & SKB_GSO_TCPV6) { if (shinfo->gso_type & SKB_GSO_TCPV6) {
shinfo->gso_type &= ~SKB_GSO_TCPV6; shinfo->gso_type &= ~SKB_GSO_TCPV6;
shinfo->gso_type |= SKB_GSO_TCPV4; shinfo->gso_type |= SKB_GSO_TCPV4;
} }
/* Header must be checked, and gso_segs recomputed. */
shinfo->gso_type |= SKB_GSO_DODGY;
shinfo->gso_segs = 0;
} }
skb->protocol = htons(ETH_P_IP); skb->protocol = htons(ETH_P_IP);

View File

@@ -76,6 +76,7 @@
#include <linux/capability.h> #include <linux/capability.h>
#include <linux/user_namespace.h> #include <linux/user_namespace.h>
#include <linux/indirect_call_wrapper.h> #include <linux/indirect_call_wrapper.h>
#include <trace/hooks/net.h>
#include "datagram.h" #include "datagram.h"
@@ -701,6 +702,7 @@ void kfree_skb(struct sk_buff *skb)
if (!skb_unref(skb)) if (!skb_unref(skb))
return; return;
trace_android_vh_kfree_skb(skb);
trace_kfree_skb(skb, __builtin_return_address(0)); trace_kfree_skb(skb, __builtin_return_address(0));
__kfree_skb(skb); __kfree_skb(skb);
} }

View File

@@ -80,6 +80,7 @@
#include <linux/jump_label_ratelimit.h> #include <linux/jump_label_ratelimit.h>
#include <net/busy_poll.h> #include <net/busy_poll.h>
#include <net/mptcp.h> #include <net/mptcp.h>
#include <trace/hooks/net.h>
int sysctl_tcp_max_orphans __read_mostly = NR_FILE; int sysctl_tcp_max_orphans __read_mostly = NR_FILE;
@@ -4618,6 +4619,7 @@ static bool tcp_ooo_try_coalesce(struct sock *sk,
static void tcp_drop(struct sock *sk, struct sk_buff *skb) static void tcp_drop(struct sock *sk, struct sk_buff *skb)
{ {
trace_android_vh_kfree_skb(skb);
sk_drops_add(sk, skb); sk_drops_add(sk, skb);
__kfree_skb(skb); __kfree_skb(skb);
} }