mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
Merge 6.16-rc4 into tty-next
We need the tty/serial fixes in here as well. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
commit
815ac67919
706 changed files with 8588 additions and 3883 deletions
14
.mailmap
14
.mailmap
|
@ -197,6 +197,7 @@ Daniel Borkmann <daniel@iogearbox.net> <daniel.borkmann@tik.ee.ethz.ch>
|
|||
Daniel Borkmann <daniel@iogearbox.net> <dborkmann@redhat.com>
|
||||
Daniel Borkmann <daniel@iogearbox.net> <dborkman@redhat.com>
|
||||
Daniel Borkmann <daniel@iogearbox.net> <dxchgb@gmail.com>
|
||||
Danilo Krummrich <dakr@kernel.org> <dakr@redhat.com>
|
||||
David Brownell <david-b@pacbell.net>
|
||||
David Collins <quic_collinsd@quicinc.com> <collinsd@codeaurora.org>
|
||||
David Heidelberg <david@ixit.cz> <d.okias@gmail.com>
|
||||
|
@ -222,6 +223,8 @@ Dmitry Safonov <0x7f454c46@gmail.com> <d.safonov@partner.samsung.com>
|
|||
Dmitry Safonov <0x7f454c46@gmail.com> <dsafonov@virtuozzo.com>
|
||||
Domen Puncer <domen@coderock.org>
|
||||
Douglas Gilbert <dougg@torque.net>
|
||||
Drew Fustini <fustini@kernel.org> <drew@pdp7.com>
|
||||
<duje@dujemihanovic.xyz> <duje.mihanovic@skole.hr>
|
||||
Ed L. Cashin <ecashin@coraid.com>
|
||||
Elliot Berman <quic_eberman@quicinc.com> <eberman@codeaurora.org>
|
||||
Enric Balletbo i Serra <eballetbo@kernel.org> <enric.balletbo@collabora.com>
|
||||
|
@ -282,6 +285,7 @@ Gustavo Padovan <gustavo@las.ic.unicamp.br>
|
|||
Gustavo Padovan <padovan@profusion.mobi>
|
||||
Hamza Mahfooz <hamzamahfooz@linux.microsoft.com> <hamza.mahfooz@amd.com>
|
||||
Hanjun Guo <guohanjun@huawei.com> <hanjun.guo@linaro.org>
|
||||
Hans de Goede <hansg@kernel.org> <hdegoede@redhat.com>
|
||||
Hans Verkuil <hverkuil@xs4all.nl> <hansverk@cisco.com>
|
||||
Hans Verkuil <hverkuil@xs4all.nl> <hverkuil-cisco@xs4all.nl>
|
||||
Harry Yoo <harry.yoo@oracle.com> <42.hyeyoo@gmail.com>
|
||||
|
@ -691,9 +695,10 @@ Serge Hallyn <sergeh@kernel.org> <serge.hallyn@canonical.com>
|
|||
Serge Hallyn <sergeh@kernel.org> <serue@us.ibm.com>
|
||||
Seth Forshee <sforshee@kernel.org> <seth.forshee@canonical.com>
|
||||
Shakeel Butt <shakeel.butt@linux.dev> <shakeelb@google.com>
|
||||
Shannon Nelson <shannon.nelson@amd.com> <snelson@pensando.io>
|
||||
Shannon Nelson <shannon.nelson@amd.com> <shannon.nelson@intel.com>
|
||||
Shannon Nelson <shannon.nelson@amd.com> <shannon.nelson@oracle.com>
|
||||
Shannon Nelson <sln@onemain.com> <shannon.nelson@amd.com>
|
||||
Shannon Nelson <sln@onemain.com> <snelson@pensando.io>
|
||||
Shannon Nelson <sln@onemain.com> <shannon.nelson@intel.com>
|
||||
Shannon Nelson <sln@onemain.com> <shannon.nelson@oracle.com>
|
||||
Sharath Chandra Vurukala <quic_sharathv@quicinc.com> <sharathv@codeaurora.org>
|
||||
Shiraz Hashim <shiraz.linux.kernel@gmail.com> <shiraz.hashim@st.com>
|
||||
Shuah Khan <shuah@kernel.org> <shuahkhan@gmail.com>
|
||||
|
@ -827,3 +832,6 @@ Yosry Ahmed <yosry.ahmed@linux.dev> <yosryahmed@google.com>
|
|||
Yusuke Goda <goda.yusuke@renesas.com>
|
||||
Zack Rusin <zack.rusin@broadcom.com> <zackr@vmware.com>
|
||||
Zhu Yanjun <zyjzyj2000@gmail.com> <yanjunz@nvidia.com>
|
||||
Zijun Hu <zijun.hu@oss.qualcomm.com> <quic_zijuhu@quicinc.com>
|
||||
Zijun Hu <zijun.hu@oss.qualcomm.com> <zijuhu@codeaurora.org>
|
||||
Zijun Hu <zijun_hu@htc.com>
|
||||
|
|
5
CREDITS
5
CREDITS
|
@ -2981,6 +2981,11 @@ S: 521 Pleasant Valley Road
|
|||
S: Potsdam, New York 13676
|
||||
S: USA
|
||||
|
||||
N: Shannon Nelson
|
||||
E: sln@onemain.com
|
||||
D: Worked on several network drivers including
|
||||
D: ixgbe, i40e, ionic, pds_core, pds_vdpa, pds_fwctl
|
||||
|
||||
N: Dave Neuer
|
||||
E: dave.neuer@pobox.com
|
||||
D: Helped implement support for Compaq's H31xx series iPAQs
|
||||
|
|
|
@ -49,6 +49,12 @@ Description:
|
|||
(RO) Supported minimum scrub cycle duration in seconds
|
||||
by the memory scrubber.
|
||||
|
||||
Device-based scrub: returns the minimum scrub cycle
|
||||
supported by the memory device.
|
||||
|
||||
Region-based scrub: returns the max of minimum scrub cycles
|
||||
supported by individual memory devices that back the region.
|
||||
|
||||
What: /sys/bus/edac/devices/<dev-name>/scrubX/max_cycle_duration
|
||||
Date: March 2025
|
||||
KernelVersion: 6.15
|
||||
|
@ -57,6 +63,16 @@ Description:
|
|||
(RO) Supported maximum scrub cycle duration in seconds
|
||||
by the memory scrubber.
|
||||
|
||||
Device-based scrub: returns the maximum scrub cycle supported
|
||||
by the memory device.
|
||||
|
||||
Region-based scrub: returns the min of maximum scrub cycles
|
||||
supported by individual memory devices that back the region.
|
||||
|
||||
If the memory device does not provide maximum scrub cycle
|
||||
information, return the maximum supported value of the scrub
|
||||
cycle field.
|
||||
|
||||
What: /sys/bus/edac/devices/<dev-name>/scrubX/current_cycle_duration
|
||||
Date: March 2025
|
||||
KernelVersion: 6.15
|
||||
|
|
|
@ -234,7 +234,7 @@ Before jumping into the kernel, the following conditions must be met:
|
|||
|
||||
- If the kernel is entered at EL1:
|
||||
|
||||
- ICC.SRE_EL2.Enable (bit 3) must be initialised to 0b1
|
||||
- ICC_SRE_EL2.Enable (bit 3) must be initialised to 0b1
|
||||
- ICC_SRE_EL2.SRE (bit 0) must be initialised to 0b1.
|
||||
|
||||
- The DT or ACPI tables must describe a GICv3 interrupt controller.
|
||||
|
|
|
@ -233,10 +233,16 @@ attempts in order to enforce the LRU property which have increasing impacts on
|
|||
other CPUs involved in the following operation attempts:
|
||||
|
||||
- Attempt to use CPU-local state to batch operations
|
||||
- Attempt to fetch free nodes from global lists
|
||||
- Attempt to fetch ``target_free`` free nodes from global lists
|
||||
- Attempt to pull any node from a global list and remove it from the hashmap
|
||||
- Attempt to pull any node from any CPU's list and remove it from the hashmap
|
||||
|
||||
The number of nodes to borrow from the global list in a batch, ``target_free``,
|
||||
depends on the size of the map. Larger batch size reduces lock contention, but
|
||||
may also exhaust the global structure. The value is computed at map init to
|
||||
avoid exhaustion, by limiting aggregate reservation by all CPUs to half the map
|
||||
size. With a minimum of a single element and maximum budget of 128 at a time.
|
||||
|
||||
This algorithm is described visually in the following diagram. See the
|
||||
description in commit 3a08c2fd7634 ("bpf: LRU List") for a full explanation of
|
||||
the corresponding operations:
|
||||
|
|
|
@ -35,18 +35,18 @@ digraph {
|
|||
fn_bpf_lru_list_pop_free_to_local [shape=rectangle,fillcolor=2,
|
||||
label="Flush local pending,
|
||||
Rotate Global list, move
|
||||
LOCAL_FREE_TARGET
|
||||
target_free
|
||||
from global -> local"]
|
||||
// Also corresponds to:
|
||||
// fn__local_list_flush()
|
||||
// fn_bpf_lru_list_rotate()
|
||||
fn___bpf_lru_node_move_to_free[shape=diamond,fillcolor=2,
|
||||
label="Able to free\nLOCAL_FREE_TARGET\nnodes?"]
|
||||
label="Able to free\ntarget_free\nnodes?"]
|
||||
|
||||
fn___bpf_lru_list_shrink_inactive [shape=rectangle,fillcolor=3,
|
||||
label="Shrink inactive list
|
||||
up to remaining
|
||||
LOCAL_FREE_TARGET
|
||||
target_free
|
||||
(global LRU -> local)"]
|
||||
fn___bpf_lru_list_shrink [shape=diamond,fillcolor=2,
|
||||
label="> 0 entries in\nlocal free list?"]
|
||||
|
|
|
@ -118,15 +118,11 @@ $defs:
|
|||
ti,lvds-vod-swing-clock-microvolt:
|
||||
description: LVDS diferential output voltage <min max> for clock
|
||||
lanes in microvolts.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||||
minItems: 2
|
||||
maxItems: 2
|
||||
|
||||
ti,lvds-vod-swing-data-microvolt:
|
||||
description: LVDS diferential output voltage <min max> for data
|
||||
lanes in microvolts.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||||
minItems: 2
|
||||
maxItems: 2
|
||||
|
||||
allOf:
|
||||
|
|
|
@ -97,7 +97,10 @@ properties:
|
|||
|
||||
resets:
|
||||
items:
|
||||
- description: module reset
|
||||
- description:
|
||||
Module reset. This property is optional for controllers in Tegra194,
|
||||
Tegra234 etc where an internal software reset is available as an
|
||||
alternative.
|
||||
|
||||
reset-names:
|
||||
items:
|
||||
|
@ -116,6 +119,13 @@ properties:
|
|||
- const: rx
|
||||
- const: tx
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- interrupts
|
||||
- clocks
|
||||
- clock-names
|
||||
|
||||
allOf:
|
||||
- $ref: /schemas/i2c/i2c-controller.yaml
|
||||
- if:
|
||||
|
@ -169,6 +179,18 @@ allOf:
|
|||
properties:
|
||||
power-domains: false
|
||||
|
||||
- if:
|
||||
not:
|
||||
properties:
|
||||
compatible:
|
||||
contains:
|
||||
enum:
|
||||
- nvidia,tegra194-i2c
|
||||
then:
|
||||
required:
|
||||
- resets
|
||||
- reset-names
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
|
|
|
@ -1,65 +0,0 @@
|
|||
Device-tree bindings for persistent memory regions
|
||||
-----------------------------------------------------
|
||||
|
||||
Persistent memory refers to a class of memory devices that are:
|
||||
|
||||
a) Usable as main system memory (i.e. cacheable), and
|
||||
b) Retain their contents across power failure.
|
||||
|
||||
Given b) it is best to think of persistent memory as a kind of memory mapped
|
||||
storage device. To ensure data integrity the operating system needs to manage
|
||||
persistent regions separately to the normal memory pool. To aid with that this
|
||||
binding provides a standardised interface for discovering where persistent
|
||||
memory regions exist inside the physical address space.
|
||||
|
||||
Bindings for the region nodes:
|
||||
-----------------------------
|
||||
|
||||
Required properties:
|
||||
- compatible = "pmem-region"
|
||||
|
||||
- reg = <base, size>;
|
||||
The reg property should specify an address range that is
|
||||
translatable to a system physical address range. This address
|
||||
range should be mappable as normal system memory would be
|
||||
(i.e cacheable).
|
||||
|
||||
If the reg property contains multiple address ranges
|
||||
each address range will be treated as though it was specified
|
||||
in a separate device node. Having multiple address ranges in a
|
||||
node implies no special relationship between the two ranges.
|
||||
|
||||
Optional properties:
|
||||
- Any relevant NUMA associativity properties for the target platform.
|
||||
|
||||
- volatile; This property indicates that this region is actually
|
||||
backed by non-persistent memory. This lets the OS know that it
|
||||
may skip the cache flushes required to ensure data is made
|
||||
persistent after a write.
|
||||
|
||||
If this property is absent then the OS must assume that the region
|
||||
is backed by non-volatile memory.
|
||||
|
||||
Examples:
|
||||
--------------------
|
||||
|
||||
/*
|
||||
* This node specifies one 4KB region spanning from
|
||||
* 0x5000 to 0x5fff that is backed by non-volatile memory.
|
||||
*/
|
||||
pmem@5000 {
|
||||
compatible = "pmem-region";
|
||||
reg = <0x00005000 0x00001000>;
|
||||
};
|
||||
|
||||
/*
|
||||
* This node specifies two 4KB regions that are backed by
|
||||
* volatile (normal) memory.
|
||||
*/
|
||||
pmem@6000 {
|
||||
compatible = "pmem-region";
|
||||
reg = < 0x00006000 0x00001000
|
||||
0x00008000 0x00001000 >;
|
||||
volatile;
|
||||
};
|
||||
|
48
Documentation/devicetree/bindings/pmem/pmem-region.yaml
Normal file
48
Documentation/devicetree/bindings/pmem/pmem-region.yaml
Normal file
|
@ -0,0 +1,48 @@
|
|||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/pmem-region.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
maintainers:
|
||||
- Oliver O'Halloran <oohall@gmail.com>
|
||||
|
||||
title: Persistent Memory Regions
|
||||
|
||||
description: |
|
||||
Persistent memory refers to a class of memory devices that are:
|
||||
|
||||
a) Usable as main system memory (i.e. cacheable), and
|
||||
b) Retain their contents across power failure.
|
||||
|
||||
Given b) it is best to think of persistent memory as a kind of memory mapped
|
||||
storage device. To ensure data integrity the operating system needs to manage
|
||||
persistent regions separately to the normal memory pool. To aid with that this
|
||||
binding provides a standardised interface for discovering where persistent
|
||||
memory regions exist inside the physical address space.
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: pmem-region
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
volatile:
|
||||
description:
|
||||
Indicates the region is volatile (non-persistent) and the OS can skip
|
||||
cache flushes for writes
|
||||
type: boolean
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
pmem@5000 {
|
||||
compatible = "pmem-region";
|
||||
reg = <0x00005000 0x00001000>;
|
||||
};
|
|
@ -45,7 +45,7 @@ allOf:
|
|||
- ns16550
|
||||
- ns16550a
|
||||
then:
|
||||
anyOf:
|
||||
oneOf:
|
||||
- required: [ clock-frequency ]
|
||||
- required: [ clocks ]
|
||||
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
Altera JTAG UART
|
||||
|
||||
Required properties:
|
||||
- compatible : should be "ALTR,juart-1.0" <DEPRECATED>
|
||||
- compatible : should be "altr,juart-1.0"
|
|
@ -1,8 +0,0 @@
|
|||
Altera UART
|
||||
|
||||
Required properties:
|
||||
- compatible : should be "ALTR,uart-1.0" <DEPRECATED>
|
||||
- compatible : should be "altr,uart-1.0"
|
||||
|
||||
Optional properties:
|
||||
- clock-frequency : frequency of the clock input to the UART
|
19
Documentation/devicetree/bindings/serial/altr,juart-1.0.yaml
Normal file
19
Documentation/devicetree/bindings/serial/altr,juart-1.0.yaml
Normal file
|
@ -0,0 +1,19 @@
|
|||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/serial/altr,juart-1.0.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Altera JTAG UART
|
||||
|
||||
maintainers:
|
||||
- Dinh Nguyen <dinguyen@kernel.org>
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: altr,juart-1.0
|
||||
|
||||
required:
|
||||
- compatible
|
||||
|
||||
additionalProperties: false
|
25
Documentation/devicetree/bindings/serial/altr,uart-1.0.yaml
Normal file
25
Documentation/devicetree/bindings/serial/altr,uart-1.0.yaml
Normal file
|
@ -0,0 +1,25 @@
|
|||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/serial/altr,uart-1.0.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Altera UART
|
||||
|
||||
maintainers:
|
||||
- Dinh Nguyen <dinguyen@kernel.org>
|
||||
|
||||
allOf:
|
||||
- $ref: /schemas/serial/serial.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: altr,uart-1.0
|
||||
|
||||
clock-frequency:
|
||||
description: Frequency of the clock input to the UART.
|
||||
|
||||
required:
|
||||
- compatible
|
||||
|
||||
unevaluatedProperties: false
|
|
@ -1,7 +1,7 @@
|
|||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas//soc/fsl/fsl,ls1028a-reset.yaml#
|
||||
$id: http://devicetree.org/schemas/soc/fsl/fsl,ls1028a-reset.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Freescale Layerscape Reset Registers Module
|
||||
|
|
|
@ -1249,3 +1249,12 @@ Using try_lookup_noperm() will require linux/namei.h to be included.
|
|||
|
||||
Calling conventions for ->d_automount() have changed; we should *not* grab
|
||||
an extra reference to new mount - it should be returned with refcount 1.
|
||||
|
||||
---
|
||||
|
||||
collect_mounts()/drop_collected_mounts()/iterate_mounts() are gone now.
|
||||
Replacement is collect_paths()/drop_collected_path(), with no special
|
||||
iterator needed. Instead of a cloned mount tree, the new interface returns
|
||||
an array of struct path, one for each mount collect_mounts() would've
|
||||
created. These struct path point to locations in the caller's namespace
|
||||
that would be roots of the cloned mounts.
|
||||
|
|
|
@ -25,7 +25,7 @@ providing a consistent API to upper layers of the driver stack.
|
|||
GSP Support
|
||||
------------------------
|
||||
|
||||
.. kernel-doc:: drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c
|
||||
.. kernel-doc:: drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/rpc.c
|
||||
:doc: GSP message queue element
|
||||
|
||||
.. kernel-doc:: drivers/gpu/drm/nouveau/include/nvkm/subdev/gsp.h
|
||||
|
|
|
@ -6,6 +6,9 @@ $schema: https://json-schema.org/draft-07/schema
|
|||
|
||||
# Common defines
|
||||
$defs:
|
||||
name:
|
||||
type: string
|
||||
pattern: ^[0-9a-z-]+$
|
||||
uint:
|
||||
type: integer
|
||||
minimum: 0
|
||||
|
@ -76,7 +79,7 @@ properties:
|
|||
additionalProperties: False
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
$ref: '#/$defs/name'
|
||||
header:
|
||||
description: For C-compatible languages, header which already defines this value.
|
||||
type: string
|
||||
|
@ -103,7 +106,7 @@ properties:
|
|||
additionalProperties: False
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
$ref: '#/$defs/name'
|
||||
value:
|
||||
type: integer
|
||||
doc:
|
||||
|
@ -132,7 +135,7 @@ properties:
|
|||
additionalProperties: False
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
$ref: '#/$defs/name'
|
||||
type:
|
||||
description: The netlink attribute type
|
||||
enum: [ u8, u16, u32, u64, s8, s16, s32, s64, string, binary ]
|
||||
|
@ -169,7 +172,7 @@ properties:
|
|||
name:
|
||||
description: |
|
||||
Name used when referring to this space in other definitions, not used outside of the spec.
|
||||
type: string
|
||||
$ref: '#/$defs/name'
|
||||
name-prefix:
|
||||
description: |
|
||||
Prefix for the C enum name of the attributes. Default family[name]-set[name]-a-
|
||||
|
@ -206,7 +209,7 @@ properties:
|
|||
additionalProperties: False
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
$ref: '#/$defs/name'
|
||||
type: &attr-type
|
||||
description: The netlink attribute type
|
||||
enum: [ unused, pad, flag, binary, bitfield32,
|
||||
|
@ -348,7 +351,7 @@ properties:
|
|||
properties:
|
||||
name:
|
||||
description: Name of the operation, also defining its C enum value in uAPI.
|
||||
type: string
|
||||
$ref: '#/$defs/name'
|
||||
doc:
|
||||
description: Documentation for the command.
|
||||
type: string
|
||||
|
|
|
@ -6,6 +6,9 @@ $schema: https://json-schema.org/draft-07/schema
|
|||
|
||||
# Common defines
|
||||
$defs:
|
||||
name:
|
||||
type: string
|
||||
pattern: ^[0-9a-z-]+$
|
||||
uint:
|
||||
type: integer
|
||||
minimum: 0
|
||||
|
@ -29,7 +32,7 @@ additionalProperties: False
|
|||
properties:
|
||||
name:
|
||||
description: Name of the genetlink family.
|
||||
type: string
|
||||
$ref: '#/$defs/name'
|
||||
doc:
|
||||
type: string
|
||||
protocol:
|
||||
|
@ -48,7 +51,7 @@ properties:
|
|||
additionalProperties: False
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
$ref: '#/$defs/name'
|
||||
header:
|
||||
description: For C-compatible languages, header which already defines this value.
|
||||
type: string
|
||||
|
@ -75,7 +78,7 @@ properties:
|
|||
additionalProperties: False
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
$ref: '#/$defs/name'
|
||||
value:
|
||||
type: integer
|
||||
doc:
|
||||
|
@ -96,7 +99,7 @@ properties:
|
|||
name:
|
||||
description: |
|
||||
Name used when referring to this space in other definitions, not used outside of the spec.
|
||||
type: string
|
||||
$ref: '#/$defs/name'
|
||||
name-prefix:
|
||||
description: |
|
||||
Prefix for the C enum name of the attributes. Default family[name]-set[name]-a-
|
||||
|
@ -121,7 +124,7 @@ properties:
|
|||
additionalProperties: False
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
$ref: '#/$defs/name'
|
||||
type: &attr-type
|
||||
enum: [ unused, pad, flag, binary,
|
||||
uint, sint, u8, u16, u32, u64, s8, s16, s32, s64,
|
||||
|
@ -243,7 +246,7 @@ properties:
|
|||
properties:
|
||||
name:
|
||||
description: Name of the operation, also defining its C enum value in uAPI.
|
||||
type: string
|
||||
$ref: '#/$defs/name'
|
||||
doc:
|
||||
description: Documentation for the command.
|
||||
type: string
|
||||
|
@ -327,7 +330,7 @@ properties:
|
|||
name:
|
||||
description: |
|
||||
The name for the group, used to form the define and the value of the define.
|
||||
type: string
|
||||
$ref: '#/$defs/name'
|
||||
flags: *cmd_flags
|
||||
|
||||
kernel-family:
|
||||
|
|
|
@ -6,6 +6,12 @@ $schema: https://json-schema.org/draft-07/schema
|
|||
|
||||
# Common defines
|
||||
$defs:
|
||||
name:
|
||||
type: string
|
||||
pattern: ^[0-9a-z-]+$
|
||||
name-cap:
|
||||
type: string
|
||||
pattern: ^[0-9a-zA-Z-]+$
|
||||
uint:
|
||||
type: integer
|
||||
minimum: 0
|
||||
|
@ -71,7 +77,7 @@ properties:
|
|||
additionalProperties: False
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
$ref: '#/$defs/name'
|
||||
header:
|
||||
description: For C-compatible languages, header which already defines this value.
|
||||
type: string
|
||||
|
@ -98,7 +104,7 @@ properties:
|
|||
additionalProperties: False
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
$ref: '#/$defs/name'
|
||||
value:
|
||||
type: integer
|
||||
doc:
|
||||
|
@ -124,7 +130,7 @@ properties:
|
|||
additionalProperties: False
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
$ref: '#/$defs/name-cap'
|
||||
type:
|
||||
description: |
|
||||
The netlink attribute type. Members of type 'binary' or 'pad'
|
||||
|
@ -183,7 +189,7 @@ properties:
|
|||
name:
|
||||
description: |
|
||||
Name used when referring to this space in other definitions, not used outside of the spec.
|
||||
type: string
|
||||
$ref: '#/$defs/name'
|
||||
name-prefix:
|
||||
description: |
|
||||
Prefix for the C enum name of the attributes. Default family[name]-set[name]-a-
|
||||
|
@ -220,7 +226,7 @@ properties:
|
|||
additionalProperties: False
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
$ref: '#/$defs/name'
|
||||
type: &attr-type
|
||||
description: The netlink attribute type
|
||||
enum: [ unused, pad, flag, binary, bitfield32,
|
||||
|
@ -408,7 +414,7 @@ properties:
|
|||
properties:
|
||||
name:
|
||||
description: Name of the operation, also defining its C enum value in uAPI.
|
||||
type: string
|
||||
$ref: '#/$defs/name'
|
||||
doc:
|
||||
description: Documentation for the command.
|
||||
type: string
|
||||
|
|
|
@ -38,15 +38,15 @@ definitions:
|
|||
-
|
||||
name: dsa
|
||||
-
|
||||
name: pci_pf
|
||||
name: pci-pf
|
||||
-
|
||||
name: pci_vf
|
||||
name: pci-vf
|
||||
-
|
||||
name: virtual
|
||||
-
|
||||
name: unused
|
||||
-
|
||||
name: pci_sf
|
||||
name: pci-sf
|
||||
-
|
||||
type: enum
|
||||
name: port-fn-state
|
||||
|
@ -220,7 +220,7 @@ definitions:
|
|||
-
|
||||
name: flag
|
||||
-
|
||||
name: nul_string
|
||||
name: nul-string
|
||||
value: 10
|
||||
-
|
||||
name: binary
|
||||
|
|
|
@ -188,7 +188,7 @@ definitions:
|
|||
value: 10000
|
||||
-
|
||||
type: const
|
||||
name: pin-frequency-77_5-khz
|
||||
name: pin-frequency-77-5-khz
|
||||
value: 77500
|
||||
-
|
||||
type: const
|
||||
|
|
|
@ -7,6 +7,9 @@ protocol: genetlink-legacy
|
|||
doc: Partial family for Ethtool Netlink.
|
||||
uapi-header: linux/ethtool_netlink_generated.h
|
||||
|
||||
c-family-name: ethtool-genl-name
|
||||
c-version-name: ethtool-genl-version
|
||||
|
||||
definitions:
|
||||
-
|
||||
name: udp-tunnel-type
|
||||
|
@ -45,7 +48,7 @@ definitions:
|
|||
name: started
|
||||
doc: The firmware flashing process has started.
|
||||
-
|
||||
name: in_progress
|
||||
name: in-progress
|
||||
doc: The firmware flashing process is in progress.
|
||||
-
|
||||
name: completed
|
||||
|
@ -1419,7 +1422,7 @@ attribute-sets:
|
|||
name: hkey
|
||||
type: binary
|
||||
-
|
||||
name: input_xfrm
|
||||
name: input-xfrm
|
||||
type: u32
|
||||
-
|
||||
name: start-context
|
||||
|
@ -2235,7 +2238,7 @@ operations:
|
|||
- hfunc
|
||||
- indir
|
||||
- hkey
|
||||
- input_xfrm
|
||||
- input-xfrm
|
||||
dump:
|
||||
request:
|
||||
attributes:
|
||||
|
|
|
@ -15,7 +15,7 @@ kernel-policy: global
|
|||
definitions:
|
||||
-
|
||||
type: enum
|
||||
name: encap_type
|
||||
name: encap-type
|
||||
name-prefix: fou-encap-
|
||||
enum-name:
|
||||
entries: [ unspec, direct, gue ]
|
||||
|
@ -43,26 +43,26 @@ attribute-sets:
|
|||
name: type
|
||||
type: u8
|
||||
-
|
||||
name: remcsum_nopartial
|
||||
name: remcsum-nopartial
|
||||
type: flag
|
||||
-
|
||||
name: local_v4
|
||||
name: local-v4
|
||||
type: u32
|
||||
-
|
||||
name: local_v6
|
||||
name: local-v6
|
||||
type: binary
|
||||
checks:
|
||||
min-len: 16
|
||||
-
|
||||
name: peer_v4
|
||||
name: peer-v4
|
||||
type: u32
|
||||
-
|
||||
name: peer_v6
|
||||
name: peer-v6
|
||||
type: binary
|
||||
checks:
|
||||
min-len: 16
|
||||
-
|
||||
name: peer_port
|
||||
name: peer-port
|
||||
type: u16
|
||||
byte-order: big-endian
|
||||
-
|
||||
|
@ -90,12 +90,12 @@ operations:
|
|||
- port
|
||||
- ipproto
|
||||
- type
|
||||
- remcsum_nopartial
|
||||
- local_v4
|
||||
- peer_v4
|
||||
- local_v6
|
||||
- peer_v6
|
||||
- peer_port
|
||||
- remcsum-nopartial
|
||||
- local-v4
|
||||
- peer-v4
|
||||
- local-v6
|
||||
- peer-v6
|
||||
- peer-port
|
||||
- ifindex
|
||||
|
||||
-
|
||||
|
@ -112,11 +112,11 @@ operations:
|
|||
- af
|
||||
- ifindex
|
||||
- port
|
||||
- peer_port
|
||||
- local_v4
|
||||
- peer_v4
|
||||
- local_v6
|
||||
- peer_v6
|
||||
- peer-port
|
||||
- local-v4
|
||||
- peer-v4
|
||||
- local-v6
|
||||
- peer-v6
|
||||
|
||||
-
|
||||
name: get
|
||||
|
|
|
@ -57,21 +57,21 @@ definitions:
|
|||
doc: >-
|
||||
A new subflow has been established. 'error' should not be set.
|
||||
Attributes: token, family, loc_id, rem_id, saddr4 | saddr6, daddr4 |
|
||||
daddr6, sport, dport, backup, if_idx [, error].
|
||||
daddr6, sport, dport, backup, if-idx [, error].
|
||||
-
|
||||
name: sub-closed
|
||||
doc: >-
|
||||
A subflow has been closed. An error (copy of sk_err) could be set if an
|
||||
error has been detected for this subflow.
|
||||
Attributes: token, family, loc_id, rem_id, saddr4 | saddr6, daddr4 |
|
||||
daddr6, sport, dport, backup, if_idx [, error].
|
||||
daddr6, sport, dport, backup, if-idx [, error].
|
||||
-
|
||||
name: sub-priority
|
||||
value: 13
|
||||
doc: >-
|
||||
The priority of a subflow has changed. 'error' should not be set.
|
||||
Attributes: token, family, loc_id, rem_id, saddr4 | saddr6, daddr4 |
|
||||
daddr6, sport, dport, backup, if_idx [, error].
|
||||
daddr6, sport, dport, backup, if-idx [, error].
|
||||
-
|
||||
name: listener-created
|
||||
value: 15
|
||||
|
@ -255,7 +255,7 @@ attribute-sets:
|
|||
name: timeout
|
||||
type: u32
|
||||
-
|
||||
name: if_idx
|
||||
name: if-idx
|
||||
type: u32
|
||||
-
|
||||
name: reset-reason
|
||||
|
|
|
@ -27,7 +27,7 @@ attribute-sets:
|
|||
name: proc
|
||||
type: u32
|
||||
-
|
||||
name: service_time
|
||||
name: service-time
|
||||
type: s64
|
||||
-
|
||||
name: pad
|
||||
|
@ -139,7 +139,7 @@ operations:
|
|||
- prog
|
||||
- version
|
||||
- proc
|
||||
- service_time
|
||||
- service-time
|
||||
- saddr4
|
||||
- daddr4
|
||||
- saddr6
|
||||
|
|
|
@ -216,7 +216,7 @@ definitions:
|
|||
type: struct
|
||||
members:
|
||||
-
|
||||
name: nd_target
|
||||
name: nd-target
|
||||
type: binary
|
||||
len: 16
|
||||
byte-order: big-endian
|
||||
|
@ -258,12 +258,12 @@ definitions:
|
|||
type: struct
|
||||
members:
|
||||
-
|
||||
name: vlan_tpid
|
||||
name: vlan-tpid
|
||||
type: u16
|
||||
byte-order: big-endian
|
||||
doc: Tag protocol identifier (TPID) to push.
|
||||
-
|
||||
name: vlan_tci
|
||||
name: vlan-tci
|
||||
type: u16
|
||||
byte-order: big-endian
|
||||
doc: Tag control identifier (TCI) to push.
|
||||
|
|
|
@ -603,7 +603,7 @@ definitions:
|
|||
name: optmask
|
||||
type: u32
|
||||
-
|
||||
name: if_stats_msg
|
||||
name: if-stats-msg
|
||||
type: struct
|
||||
members:
|
||||
-
|
||||
|
@ -2486,7 +2486,7 @@ operations:
|
|||
name: getstats
|
||||
doc: Get / dump link stats.
|
||||
attribute-set: stats-attrs
|
||||
fixed-header: if_stats_msg
|
||||
fixed-header: if-stats-msg
|
||||
do:
|
||||
request:
|
||||
value: 94
|
||||
|
|
|
@ -232,7 +232,7 @@ definitions:
|
|||
type: u8
|
||||
doc: log(P_max / (qth-max - qth-min))
|
||||
-
|
||||
name: Scell_log
|
||||
name: Scell-log
|
||||
type: u8
|
||||
doc: cell size for idle damping
|
||||
-
|
||||
|
@ -253,7 +253,7 @@ definitions:
|
|||
name: DPs
|
||||
type: u32
|
||||
-
|
||||
name: def_DP
|
||||
name: def-DP
|
||||
type: u32
|
||||
-
|
||||
name: grio
|
||||
|
|
|
@ -66,7 +66,7 @@ Admin Function driver
|
|||
As mentioned above RVU PF0 is called the admin function (AF), this driver
|
||||
supports resource provisioning and configuration of functional blocks.
|
||||
Doesn't handle any I/O. It sets up few basic stuff but most of the
|
||||
funcionality is achieved via configuration requests from PFs and VFs.
|
||||
functionality is achieved via configuration requests from PFs and VFs.
|
||||
|
||||
PF/VFs communicates with AF via a shared memory region (mailbox). Upon
|
||||
receiving requests AF does resource provisioning and other HW configuration.
|
||||
|
|
|
@ -290,6 +290,7 @@ an involved disclosed party. The current ambassadors list:
|
|||
AMD Tom Lendacky <thomas.lendacky@amd.com>
|
||||
Ampere Darren Hart <darren@os.amperecomputing.com>
|
||||
ARM Catalin Marinas <catalin.marinas@arm.com>
|
||||
IBM Power Madhavan Srinivasan <maddy@linux.ibm.com>
|
||||
IBM Z Christian Borntraeger <borntraeger@de.ibm.com>
|
||||
Intel Tony Luck <tony.luck@intel.com>
|
||||
Qualcomm Trilok Soni <quic_tsoni@quicinc.com>
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
=====================================================================
|
||||
Audio drivers for Cirrus Logic CS35L54/56/57 Boosted Smart Amplifiers
|
||||
=====================================================================
|
||||
========================================================================
|
||||
Audio drivers for Cirrus Logic CS35L54/56/57/63 Boosted Smart Amplifiers
|
||||
========================================================================
|
||||
:Copyright: 2025 Cirrus Logic, Inc. and
|
||||
Cirrus Logic International Semiconductor Ltd.
|
||||
|
||||
|
@ -13,11 +13,11 @@ Summary
|
|||
|
||||
The high-level summary of this document is:
|
||||
|
||||
**If you have a laptop that uses CS35L54/56/57 amplifiers but audio is not
|
||||
**If you have a laptop that uses CS35L54/56/57/63 amplifiers but audio is not
|
||||
working, DO NOT ATTEMPT TO USE FIRMWARE AND SETTINGS FROM ANOTHER LAPTOP,
|
||||
EVEN IF THAT LAPTOP SEEMS SIMILAR.**
|
||||
|
||||
The CS35L54/56/57 amplifiers must be correctly configured for the power
|
||||
The CS35L54/56/57/63 amplifiers must be correctly configured for the power
|
||||
supply voltage, speaker impedance, maximum speaker voltage/current, and
|
||||
other external hardware connections.
|
||||
|
||||
|
@ -34,6 +34,7 @@ The cs35l56 drivers support:
|
|||
* CS35L54
|
||||
* CS35L56
|
||||
* CS35L57
|
||||
* CS35L63
|
||||
|
||||
There are two drivers in the kernel
|
||||
|
||||
|
@ -104,6 +105,13 @@ In this example the SSID is 10280c63.
|
|||
|
||||
The format of the firmware file names is:
|
||||
|
||||
SoundWire (except CS35L56 Rev B0):
|
||||
cs35lxx-b0-dsp1-misc-SSID[-spkidX]-l?u?
|
||||
|
||||
SoundWire CS35L56 Rev B0:
|
||||
cs35lxx-b0-dsp1-misc-SSID[-spkidX]-ampN
|
||||
|
||||
Non-SoundWire (HDA and I2S):
|
||||
cs35lxx-b0-dsp1-misc-SSID[-spkidX]-ampN
|
||||
|
||||
Where:
|
||||
|
@ -111,12 +119,18 @@ Where:
|
|||
* cs35lxx-b0 is the amplifier model and silicon revision. This information
|
||||
is logged by the driver during initialization.
|
||||
* SSID is the 8-digit hexadecimal SSID value.
|
||||
* l?u? is the physical address on the SoundWire bus of the amp this
|
||||
file applies to.
|
||||
* ampN is the amplifier number (for example amp1). This is the same as
|
||||
the prefix on the ALSA control names except that it is always lower-case
|
||||
in the file name.
|
||||
* spkidX is an optional part, used for laptops that have firmware
|
||||
configurations for different makes and models of internal speakers.
|
||||
|
||||
The CS35L56 Rev B0 continues to use the old filename scheme because a
|
||||
large number of firmware files have already been published with these
|
||||
names.
|
||||
|
||||
Sound Open Firmware and ALSA topology files
|
||||
-------------------------------------------
|
||||
|
||||
|
|
|
@ -6645,7 +6645,8 @@ to the byte array.
|
|||
.. note::
|
||||
|
||||
For KVM_EXIT_IO, KVM_EXIT_MMIO, KVM_EXIT_OSI, KVM_EXIT_PAPR, KVM_EXIT_XEN,
|
||||
KVM_EXIT_EPR, KVM_EXIT_X86_RDMSR and KVM_EXIT_X86_WRMSR the corresponding
|
||||
KVM_EXIT_EPR, KVM_EXIT_HYPERCALL, KVM_EXIT_TDX,
|
||||
KVM_EXIT_X86_RDMSR and KVM_EXIT_X86_WRMSR the corresponding
|
||||
operations are complete (and guest state is consistent) only after userspace
|
||||
has re-entered the kernel with KVM_RUN. The kernel side will first finish
|
||||
incomplete operations and then check for pending signals.
|
||||
|
@ -7174,6 +7175,62 @@ The valid value for 'flags' is:
|
|||
- KVM_NOTIFY_CONTEXT_INVALID -- the VM context is corrupted and not valid
|
||||
in VMCS. It would run into unknown result if resume the target VM.
|
||||
|
||||
::
|
||||
|
||||
/* KVM_EXIT_TDX */
|
||||
struct {
|
||||
__u64 flags;
|
||||
__u64 nr;
|
||||
union {
|
||||
struct {
|
||||
u64 ret;
|
||||
u64 data[5];
|
||||
} unknown;
|
||||
struct {
|
||||
u64 ret;
|
||||
u64 gpa;
|
||||
u64 size;
|
||||
} get_quote;
|
||||
struct {
|
||||
u64 ret;
|
||||
u64 leaf;
|
||||
u64 r11, r12, r13, r14;
|
||||
} get_tdvmcall_info;
|
||||
};
|
||||
} tdx;
|
||||
|
||||
Process a TDVMCALL from the guest. KVM forwards select TDVMCALL based
|
||||
on the Guest-Hypervisor Communication Interface (GHCI) specification;
|
||||
KVM bridges these requests to the userspace VMM with minimal changes,
|
||||
placing the inputs in the union and copying them back to the guest
|
||||
on re-entry.
|
||||
|
||||
Flags are currently always zero, whereas ``nr`` contains the TDVMCALL
|
||||
number from register R11. The remaining field of the union provide the
|
||||
inputs and outputs of the TDVMCALL. Currently the following values of
|
||||
``nr`` are defined:
|
||||
|
||||
* ``TDVMCALL_GET_QUOTE``: the guest has requested to generate a TD-Quote
|
||||
signed by a service hosting TD-Quoting Enclave operating on the host.
|
||||
Parameters and return value are in the ``get_quote`` field of the union.
|
||||
The ``gpa`` field and ``size`` specify the guest physical address
|
||||
(without the shared bit set) and the size of a shared-memory buffer, in
|
||||
which the TDX guest passes a TD Report. The ``ret`` field represents
|
||||
the return value of the GetQuote request. When the request has been
|
||||
queued successfully, the TDX guest can poll the status field in the
|
||||
shared-memory area to check whether the Quote generation is completed or
|
||||
not. When completed, the generated Quote is returned via the same buffer.
|
||||
|
||||
* ``TDVMCALL_GET_TD_VM_CALL_INFO``: the guest has requested the support
|
||||
status of TDVMCALLs. The output values for the given leaf should be
|
||||
placed in fields from ``r11`` to ``r14`` of the ``get_tdvmcall_info``
|
||||
field of the union.
|
||||
|
||||
KVM may add support for more values in the future that may cause a userspace
|
||||
exit, even without calls to ``KVM_ENABLE_CAP`` or similar. In this case,
|
||||
it will enter with output fields already valid; in the common case, the
|
||||
``unknown.ret`` field of the union will be ``TDVMCALL_STATUS_SUBFUNC_UNSUPPORTED``.
|
||||
Userspace need not do anything if it does not wish to support a TDVMCALL.
|
||||
::
|
||||
|
||||
/* Fix the size of the union. */
|
||||
|
|
131
MAINTAINERS
131
MAINTAINERS
|
@ -207,7 +207,7 @@ X: arch/*/include/uapi/
|
|||
X: include/uapi/
|
||||
|
||||
ABIT UGURU 1,2 HARDWARE MONITOR DRIVER
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
L: linux-hwmon@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/hwmon/abituguru.c
|
||||
|
@ -371,7 +371,7 @@ S: Maintained
|
|||
F: drivers/platform/x86/quickstart.c
|
||||
|
||||
ACPI SERIAL MULTI INSTANTIATE DRIVER
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/platform/x86/serial-multi-instantiate.c
|
||||
|
@ -1157,7 +1157,6 @@ F: arch/x86/include/asm/amd/node.h
|
|||
F: arch/x86/kernel/amd_node.c
|
||||
|
||||
AMD PDS CORE DRIVER
|
||||
M: Shannon Nelson <shannon.nelson@amd.com>
|
||||
M: Brett Creeley <brett.creeley@amd.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
@ -3551,7 +3550,7 @@ F: arch/arm64/boot/Makefile
|
|||
F: scripts/make_fit.py
|
||||
|
||||
ARM64 PLATFORM DRIVERS
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
M: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
|
||||
R: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
|
@ -3712,7 +3711,7 @@ F: drivers/platform/x86/asus*.c
|
|||
F: drivers/platform/x86/eeepc*.c
|
||||
|
||||
ASUS TF103C DOCK DRIVER
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
S: Maintained
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86.git
|
||||
|
@ -5614,14 +5613,14 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/peter.chen/usb.git
|
|||
F: drivers/usb/chipidea/
|
||||
|
||||
CHIPONE ICN8318 I2C TOUCHSCREEN DRIVER
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
L: linux-input@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/input/touchscreen/chipone,icn8318.yaml
|
||||
F: drivers/input/touchscreen/chipone_icn8318.c
|
||||
|
||||
CHIPONE ICN8505 I2C TOUCHSCREEN DRIVER
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
L: linux-input@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/input/touchscreen/chipone_icn8505.c
|
||||
|
@ -6919,7 +6918,7 @@ F: include/dt-bindings/pmu/exynos_ppmu.h
|
|||
F: include/linux/devfreq-event.h
|
||||
|
||||
DEVICE RESOURCE MANAGEMENT HELPERS
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
R: Matti Vaittinen <mazziesaccount@gmail.com>
|
||||
S: Maintained
|
||||
F: include/linux/devm-helpers.h
|
||||
|
@ -7518,7 +7517,7 @@ F: drivers/gpu/drm/gud/
|
|||
F: include/drm/gud.h
|
||||
|
||||
DRM DRIVER FOR GRAIN MEDIA GM12U320 PROJECTORS
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
S: Maintained
|
||||
T: git https://gitlab.freedesktop.org/drm/misc/kernel.git
|
||||
F: drivers/gpu/drm/tiny/gm12u320.c
|
||||
|
@ -7918,7 +7917,7 @@ F: drivers/gpu/drm/ci/xfails/vkms*
|
|||
F: drivers/gpu/drm/vkms/
|
||||
|
||||
DRM DRIVER FOR VIRTUALBOX VIRTUAL GPU
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
L: dri-devel@lists.freedesktop.org
|
||||
S: Maintained
|
||||
T: git https://gitlab.freedesktop.org/drm/misc/kernel.git
|
||||
|
@ -8319,7 +8318,7 @@ F: drivers/gpu/drm/panel/
|
|||
F: include/drm/drm_panel.h
|
||||
|
||||
DRM PRIVACY-SCREEN CLASS
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
L: dri-devel@lists.freedesktop.org
|
||||
S: Maintained
|
||||
T: git https://gitlab.freedesktop.org/drm/misc/kernel.git
|
||||
|
@ -9942,7 +9941,6 @@ F: drivers/fwctl/mlx5/
|
|||
|
||||
FWCTL PDS DRIVER
|
||||
M: Brett Creeley <brett.creeley@amd.com>
|
||||
R: Shannon Nelson <shannon.nelson@amd.com>
|
||||
L: linux-kernel@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/fwctl/pds/
|
||||
|
@ -10223,7 +10221,7 @@ S: Maintained
|
|||
F: Documentation/devicetree/bindings/connector/gocontroll,moduline-module-slot.yaml
|
||||
|
||||
GOODIX TOUCHSCREEN
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
L: linux-input@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/input/touchscreen/goodix*
|
||||
|
@ -10262,7 +10260,7 @@ F: include/dt-bindings/clock/google,gs101.h
|
|||
K: [gG]oogle.?[tT]ensor
|
||||
|
||||
GPD POCKET FAN DRIVER
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/platform/x86/gpd-pocket-fan.c
|
||||
|
@ -10841,7 +10839,7 @@ S: Maintained
|
|||
F: drivers/dma/hisi_dma.c
|
||||
|
||||
HISILICON GPIO DRIVER
|
||||
M: Jay Fang <f.fangjian@huawei.com>
|
||||
M: Yang Shen <shenyang39@huawei.com>
|
||||
L: linux-gpio@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/gpio/hisilicon,ascend910-gpio.yaml
|
||||
|
@ -11157,7 +11155,8 @@ F: include/linux/platform_data/huawei-gaokun-ec.h
|
|||
|
||||
HUGETLB SUBSYSTEM
|
||||
M: Muchun Song <muchun.song@linux.dev>
|
||||
R: Oscar Salvador <osalvador@suse.de>
|
||||
M: Oscar Salvador <osalvador@suse.de>
|
||||
R: David Hildenbrand <david@redhat.com>
|
||||
L: linux-mm@kvack.org
|
||||
S: Maintained
|
||||
F: Documentation/ABI/testing/sysfs-kernel-mm-hugepages
|
||||
|
@ -11168,6 +11167,7 @@ F: fs/hugetlbfs/
|
|||
F: include/linux/hugetlb.h
|
||||
F: include/trace/events/hugetlbfs.h
|
||||
F: mm/hugetlb.c
|
||||
F: mm/hugetlb_cgroup.c
|
||||
F: mm/hugetlb_cma.c
|
||||
F: mm/hugetlb_cma.h
|
||||
F: mm/hugetlb_vmemmap.c
|
||||
|
@ -11423,7 +11423,7 @@ F: drivers/i2c/busses/i2c-via.c
|
|||
F: drivers/i2c/busses/i2c-viapro.c
|
||||
|
||||
I2C/SMBUS INTEL CHT WHISKEY COVE PMIC DRIVER
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
L: linux-i2c@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/i2c/busses/i2c-cht-wc.c
|
||||
|
@ -12013,13 +12013,13 @@ S: Supported
|
|||
F: sound/soc/intel/
|
||||
|
||||
INTEL ATOMISP2 DUMMY / POWER-MANAGEMENT DRIVER
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/platform/x86/intel/atomisp2/pm.c
|
||||
|
||||
INTEL ATOMISP2 LED DRIVER
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/platform/x86/intel/atomisp2/led.c
|
||||
|
@ -13347,6 +13347,7 @@ M: Alexander Graf <graf@amazon.com>
|
|||
M: Mike Rapoport <rppt@kernel.org>
|
||||
M: Changyuan Lyu <changyuanl@google.com>
|
||||
L: kexec@lists.infradead.org
|
||||
L: linux-mm@kvack.org
|
||||
S: Maintained
|
||||
F: Documentation/admin-guide/mm/kho.rst
|
||||
F: Documentation/core-api/kho/*
|
||||
|
@ -13680,7 +13681,7 @@ S: Maintained
|
|||
F: drivers/platform/x86/lenovo-wmi-hotkey-utilities.c
|
||||
|
||||
LETSKETCH HID TABLET DRIVER
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
L: linux-input@vger.kernel.org
|
||||
S: Maintained
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git
|
||||
|
@ -13730,7 +13731,7 @@ F: drivers/ata/sata_gemini.c
|
|||
F: drivers/ata/sata_gemini.h
|
||||
|
||||
LIBATA SATA AHCI PLATFORM devices support
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
L: linux-ide@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/ata/ahci_platform.c
|
||||
|
@ -13800,7 +13801,7 @@ M: Oliver O'Halloran <oohall@gmail.com>
|
|||
L: nvdimm@lists.linux.dev
|
||||
S: Supported
|
||||
Q: https://patchwork.kernel.org/project/linux-nvdimm/list/
|
||||
F: Documentation/devicetree/bindings/pmem/pmem-region.txt
|
||||
F: Documentation/devicetree/bindings/pmem/pmem-region.yaml
|
||||
F: drivers/nvdimm/of_pmem.c
|
||||
|
||||
LIBNVDIMM: NON-VOLATILE MEMORY DEVICE SUBSYSTEM
|
||||
|
@ -14100,7 +14101,7 @@ F: Documentation/admin-guide/ldm.rst
|
|||
F: block/partitions/ldm.*
|
||||
|
||||
LOGITECH HID GAMING KEYBOARDS
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
L: linux-input@vger.kernel.org
|
||||
S: Maintained
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git
|
||||
|
@ -14782,7 +14783,7 @@ F: Documentation/devicetree/bindings/power/supply/maxim,max17040.yaml
|
|||
F: drivers/power/supply/max17040_battery.c
|
||||
|
||||
MAXIM MAX17042 FAMILY FUEL GAUGE DRIVERS
|
||||
R: Hans de Goede <hdegoede@redhat.com>
|
||||
R: Hans de Goede <hansg@kernel.org>
|
||||
R: Krzysztof Kozlowski <krzk@kernel.org>
|
||||
R: Marek Szyprowski <m.szyprowski@samsung.com>
|
||||
R: Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>
|
||||
|
@ -15584,7 +15585,7 @@ Q: https://patchwork.kernel.org/project/netdevbpf/list/
|
|||
F: drivers/net/ethernet/mellanox/mlxfw/
|
||||
|
||||
MELLANOX HARDWARE PLATFORM SUPPORT
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
M: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
|
||||
M: Vadim Pasternak <vadimp@nvidia.com>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
|
@ -15675,11 +15676,16 @@ MEMBLOCK AND MEMORY MANAGEMENT INITIALIZATION
|
|||
M: Mike Rapoport <rppt@kernel.org>
|
||||
L: linux-mm@kvack.org
|
||||
S: Maintained
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/rppt/memblock.git for-next
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/rppt/memblock.git fixes
|
||||
F: Documentation/core-api/boot-time-mm.rst
|
||||
F: Documentation/core-api/kho/bindings/memblock/*
|
||||
F: include/linux/memblock.h
|
||||
F: mm/bootmem_info.c
|
||||
F: mm/memblock.c
|
||||
F: mm/memtest.c
|
||||
F: mm/mm_init.c
|
||||
F: mm/rodata_test.c
|
||||
F: tools/testing/memblock/
|
||||
|
||||
MEMORY ALLOCATION PROFILING
|
||||
|
@ -15734,7 +15740,6 @@ F: Documentation/admin-guide/mm/
|
|||
F: Documentation/mm/
|
||||
F: include/linux/gfp.h
|
||||
F: include/linux/gfp_types.h
|
||||
F: include/linux/memfd.h
|
||||
F: include/linux/memory_hotplug.h
|
||||
F: include/linux/memory-tiers.h
|
||||
F: include/linux/mempolicy.h
|
||||
|
@ -15794,6 +15799,10 @@ S: Maintained
|
|||
W: http://www.linux-mm.org
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
|
||||
F: mm/gup.c
|
||||
F: mm/gup_test.c
|
||||
F: mm/gup_test.h
|
||||
F: tools/testing/selftests/mm/gup_longterm.c
|
||||
F: tools/testing/selftests/mm/gup_test.c
|
||||
|
||||
MEMORY MANAGEMENT - KSM (Kernel Samepage Merging)
|
||||
M: Andrew Morton <akpm@linux-foundation.org>
|
||||
|
@ -15841,6 +15850,17 @@ F: mm/numa.c
|
|||
F: mm/numa_emulation.c
|
||||
F: mm/numa_memblks.c
|
||||
|
||||
MEMORY MANAGEMENT - OOM KILLER
|
||||
M: Michal Hocko <mhocko@suse.com>
|
||||
R: David Rientjes <rientjes@google.com>
|
||||
R: Shakeel Butt <shakeel.butt@linux.dev>
|
||||
L: linux-mm@kvack.org
|
||||
S: Maintained
|
||||
F: include/linux/oom.h
|
||||
F: include/trace/events/oom.h
|
||||
F: include/uapi/linux/oom.h
|
||||
F: mm/oom_kill.c
|
||||
|
||||
MEMORY MANAGEMENT - PAGE ALLOCATOR
|
||||
M: Andrew Morton <akpm@linux-foundation.org>
|
||||
M: Vlastimil Babka <vbabka@suse.cz>
|
||||
|
@ -15855,8 +15875,17 @@ F: include/linux/compaction.h
|
|||
F: include/linux/gfp.h
|
||||
F: include/linux/page-isolation.h
|
||||
F: mm/compaction.c
|
||||
F: mm/debug_page_alloc.c
|
||||
F: mm/fail_page_alloc.c
|
||||
F: mm/page_alloc.c
|
||||
F: mm/page_ext.c
|
||||
F: mm/page_frag_cache.c
|
||||
F: mm/page_isolation.c
|
||||
F: mm/page_owner.c
|
||||
F: mm/page_poison.c
|
||||
F: mm/page_reporting.c
|
||||
F: mm/show_mem.c
|
||||
F: mm/shuffle.c
|
||||
|
||||
MEMORY MANAGEMENT - RECLAIM
|
||||
M: Andrew Morton <akpm@linux-foundation.org>
|
||||
|
@ -15870,6 +15899,7 @@ L: linux-mm@kvack.org
|
|||
S: Maintained
|
||||
F: mm/pt_reclaim.c
|
||||
F: mm/vmscan.c
|
||||
F: mm/workingset.c
|
||||
|
||||
MEMORY MANAGEMENT - RMAP (REVERSE MAPPING)
|
||||
M: Andrew Morton <akpm@linux-foundation.org>
|
||||
|
@ -15882,6 +15912,7 @@ R: Harry Yoo <harry.yoo@oracle.com>
|
|||
L: linux-mm@kvack.org
|
||||
S: Maintained
|
||||
F: include/linux/rmap.h
|
||||
F: mm/page_vma_mapped.c
|
||||
F: mm/rmap.c
|
||||
|
||||
MEMORY MANAGEMENT - SECRETMEM
|
||||
|
@ -15914,9 +15945,9 @@ F: mm/swapfile.c
|
|||
MEMORY MANAGEMENT - THP (TRANSPARENT HUGE PAGE)
|
||||
M: Andrew Morton <akpm@linux-foundation.org>
|
||||
M: David Hildenbrand <david@redhat.com>
|
||||
M: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
|
||||
R: Zi Yan <ziy@nvidia.com>
|
||||
R: Baolin Wang <baolin.wang@linux.alibaba.com>
|
||||
R: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
|
||||
R: Liam R. Howlett <Liam.Howlett@oracle.com>
|
||||
R: Nico Pache <npache@redhat.com>
|
||||
R: Ryan Roberts <ryan.roberts@arm.com>
|
||||
|
@ -15974,11 +16005,14 @@ S: Maintained
|
|||
W: http://www.linux-mm.org
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
|
||||
F: include/trace/events/mmap.h
|
||||
F: mm/mincore.c
|
||||
F: mm/mlock.c
|
||||
F: mm/mmap.c
|
||||
F: mm/mprotect.c
|
||||
F: mm/mremap.c
|
||||
F: mm/mseal.c
|
||||
F: mm/msync.c
|
||||
F: mm/nommu.c
|
||||
F: mm/vma.c
|
||||
F: mm/vma.h
|
||||
F: mm/vma_exec.c
|
||||
|
@ -16541,7 +16575,7 @@ S: Maintained
|
|||
F: drivers/platform/surface/surface_gpe.c
|
||||
|
||||
MICROSOFT SURFACE HARDWARE PLATFORM SUPPORT
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
M: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
|
||||
M: Maximilian Luz <luzmaximilian@gmail.com>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
|
@ -17709,7 +17743,7 @@ F: tools/include/nolibc/
|
|||
F: tools/testing/selftests/nolibc/
|
||||
|
||||
NOVATEK NVT-TS I2C TOUCHSCREEN DRIVER
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
L: linux-input@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/input/touchscreen/novatek,nvt-ts.yaml
|
||||
|
@ -19379,7 +19413,7 @@ F: crypto/pcrypt.c
|
|||
F: include/crypto/pcrypt.h
|
||||
|
||||
PDS DSC VIRTIO DATA PATH ACCELERATOR
|
||||
R: Shannon Nelson <shannon.nelson@amd.com>
|
||||
R: Brett Creeley <brett.creeley@amd.com>
|
||||
F: drivers/vdpa/pds/
|
||||
|
||||
PECI HARDWARE MONITORING DRIVERS
|
||||
|
@ -19401,7 +19435,6 @@ F: include/linux/peci-cpu.h
|
|||
F: include/linux/peci.h
|
||||
|
||||
PENSANDO ETHERNET DRIVERS
|
||||
M: Shannon Nelson <shannon.nelson@amd.com>
|
||||
M: Brett Creeley <brett.creeley@amd.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
@ -21377,7 +21410,7 @@ N: spacemit
|
|||
K: spacemit
|
||||
|
||||
RISC-V THEAD SoC SUPPORT
|
||||
M: Drew Fustini <drew@pdp7.com>
|
||||
M: Drew Fustini <fustini@kernel.org>
|
||||
M: Guo Ren <guoren@kernel.org>
|
||||
M: Fu Wei <wefu@redhat.com>
|
||||
L: linux-riscv@lists.infradead.org
|
||||
|
@ -22174,7 +22207,7 @@ R: Tejun Heo <tj@kernel.org>
|
|||
R: David Vernet <void@manifault.com>
|
||||
R: Andrea Righi <arighi@nvidia.com>
|
||||
R: Changwoo Min <changwoo@igalia.com>
|
||||
L: linux-kernel@vger.kernel.org
|
||||
L: sched-ext@lists.linux.dev
|
||||
S: Maintained
|
||||
W: https://github.com/sched-ext/scx
|
||||
T: git://git.kernel.org/pub/scm/linux/kernel/git/tj/sched_ext.git
|
||||
|
@ -22711,7 +22744,7 @@ K: fu[57]40
|
|||
K: [^@]sifive
|
||||
|
||||
SILEAD TOUCHSCREEN DRIVER
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
L: linux-input@vger.kernel.org
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
S: Maintained
|
||||
|
@ -22744,7 +22777,7 @@ F: Documentation/devicetree/bindings/i3c/silvaco,i3c-master.yaml
|
|||
F: drivers/i3c/master/svc-i3c-master.c
|
||||
|
||||
SIMPLEFB FB DRIVER
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
L: linux-fbdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/display/simple-framebuffer.yaml
|
||||
|
@ -22873,7 +22906,7 @@ F: Documentation/hwmon/emc2103.rst
|
|||
F: drivers/hwmon/emc2103.c
|
||||
|
||||
SMSC SCH5627 HARDWARE MONITOR DRIVER
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
L: linux-hwmon@vger.kernel.org
|
||||
S: Supported
|
||||
F: Documentation/hwmon/sch5627.rst
|
||||
|
@ -23528,7 +23561,7 @@ S: Supported
|
|||
F: Documentation/process/stable-kernel-rules.rst
|
||||
|
||||
STAGING - ATOMISP DRIVER
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
M: Mauro Carvalho Chehab <mchehab@kernel.org>
|
||||
R: Sakari Ailus <sakari.ailus@linux.intel.com>
|
||||
L: linux-media@vger.kernel.org
|
||||
|
@ -23824,7 +23857,7 @@ F: arch/m68k/sun3*/
|
|||
F: drivers/net/ethernet/i825xx/sun3*
|
||||
|
||||
SUN4I LOW RES ADC ATTACHED TABLET KEYS DRIVER
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
L: linux-input@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/input/allwinner,sun4i-a10-lradc-keys.yaml
|
||||
|
@ -24066,6 +24099,7 @@ M: Bin Du <bin.du@amd.com>
|
|||
L: linux-i2c@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/i2c/busses/i2c-designware-amdisp.c
|
||||
F: include/linux/soc/amd/isp4_misc.h
|
||||
|
||||
SYNOPSYS DESIGNWARE MMC/SD/SDIO DRIVER
|
||||
M: Jaehoon Chung <jh80.chung@samsung.com>
|
||||
|
@ -25030,8 +25064,11 @@ M: Hugh Dickins <hughd@google.com>
|
|||
R: Baolin Wang <baolin.wang@linux.alibaba.com>
|
||||
L: linux-mm@kvack.org
|
||||
S: Maintained
|
||||
F: include/linux/memfd.h
|
||||
F: include/linux/shmem_fs.h
|
||||
F: mm/memfd.c
|
||||
F: mm/shmem.c
|
||||
F: mm/shmem_quota.c
|
||||
|
||||
TOMOYO SECURITY MODULE
|
||||
M: Kentaro Takeda <takedakn@nttdata.co.jp>
|
||||
|
@ -25592,7 +25629,7 @@ F: Documentation/hid/hiddev.rst
|
|||
F: drivers/hid/usbhid/
|
||||
|
||||
USB INTEL XHCI ROLE MUX DRIVER
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
L: linux-usb@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/usb/roles/intel-xhci-usb-role-switch.c
|
||||
|
@ -25783,7 +25820,7 @@ F: Documentation/firmware-guide/acpi/intel-pmc-mux.rst
|
|||
F: drivers/usb/typec/mux/intel_pmc_mux.c
|
||||
|
||||
USB TYPEC PI3USB30532 MUX DRIVER
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
L: linux-usb@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/usb/typec/mux/pi3usb30532.c
|
||||
|
@ -25812,7 +25849,7 @@ F: drivers/usb/host/uhci*
|
|||
|
||||
USB VIDEO CLASS
|
||||
M: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
L: linux-media@vger.kernel.org
|
||||
S: Maintained
|
||||
W: http://www.ideasonboard.org/uvc/
|
||||
|
@ -26343,7 +26380,7 @@ F: include/uapi/linux/virtio_snd.h
|
|||
F: sound/virtio/*
|
||||
|
||||
VIRTUAL BOX GUEST DEVICE DRIVER
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
M: Arnd Bergmann <arnd@arndb.de>
|
||||
M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
S: Maintained
|
||||
|
@ -26352,7 +26389,7 @@ F: include/linux/vbox_utils.h
|
|||
F: include/uapi/linux/vbox*.h
|
||||
|
||||
VIRTUAL BOX SHARED FOLDER VFS DRIVER
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
L: linux-fsdevel@vger.kernel.org
|
||||
S: Maintained
|
||||
F: fs/vboxsf/*
|
||||
|
@ -26606,7 +26643,7 @@ F: drivers/mmc/host/wbsd.*
|
|||
|
||||
WACOM PROTOCOL 4 SERIAL TABLETS
|
||||
M: Julian Squires <julian@cipht.net>
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
L: linux-input@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/input/tablet/wacom_serial4.c
|
||||
|
@ -26773,7 +26810,7 @@ F: include/linux/wwan.h
|
|||
F: include/uapi/linux/wwan.h
|
||||
|
||||
X-POWERS AXP288 PMIC DRIVERS
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
S: Maintained
|
||||
F: drivers/acpi/pmic/intel_pmic_xpower.c
|
||||
N: axp288
|
||||
|
@ -26865,14 +26902,14 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/mm
|
|||
F: arch/x86/mm/
|
||||
|
||||
X86 PLATFORM ANDROID TABLETS DSDT FIXUP DRIVER
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
S: Maintained
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86.git
|
||||
F: drivers/platform/x86/x86-android-tablets/
|
||||
|
||||
X86 PLATFORM DRIVERS
|
||||
M: Hans de Goede <hdegoede@redhat.com>
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
M: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
S: Maintained
|
||||
|
|
2
Makefile
2
Makefile
|
@ -2,7 +2,7 @@
|
|||
VERSION = 6
|
||||
PATCHLEVEL = 16
|
||||
SUBLEVEL = 0
|
||||
EXTRAVERSION = -rc2
|
||||
EXTRAVERSION = -rc4
|
||||
NAME = Baby Opossum Posse
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
|
|
@ -561,68 +561,6 @@ static __always_inline void kvm_incr_pc(struct kvm_vcpu *vcpu)
|
|||
vcpu_set_flag((v), e); \
|
||||
} while (0)
|
||||
|
||||
#define __build_check_all_or_none(r, bits) \
|
||||
BUILD_BUG_ON(((r) & (bits)) && ((r) & (bits)) != (bits))
|
||||
|
||||
#define __cpacr_to_cptr_clr(clr, set) \
|
||||
({ \
|
||||
u64 cptr = 0; \
|
||||
\
|
||||
if ((set) & CPACR_EL1_FPEN) \
|
||||
cptr |= CPTR_EL2_TFP; \
|
||||
if ((set) & CPACR_EL1_ZEN) \
|
||||
cptr |= CPTR_EL2_TZ; \
|
||||
if ((set) & CPACR_EL1_SMEN) \
|
||||
cptr |= CPTR_EL2_TSM; \
|
||||
if ((clr) & CPACR_EL1_TTA) \
|
||||
cptr |= CPTR_EL2_TTA; \
|
||||
if ((clr) & CPTR_EL2_TAM) \
|
||||
cptr |= CPTR_EL2_TAM; \
|
||||
if ((clr) & CPTR_EL2_TCPAC) \
|
||||
cptr |= CPTR_EL2_TCPAC; \
|
||||
\
|
||||
cptr; \
|
||||
})
|
||||
|
||||
#define __cpacr_to_cptr_set(clr, set) \
|
||||
({ \
|
||||
u64 cptr = 0; \
|
||||
\
|
||||
if ((clr) & CPACR_EL1_FPEN) \
|
||||
cptr |= CPTR_EL2_TFP; \
|
||||
if ((clr) & CPACR_EL1_ZEN) \
|
||||
cptr |= CPTR_EL2_TZ; \
|
||||
if ((clr) & CPACR_EL1_SMEN) \
|
||||
cptr |= CPTR_EL2_TSM; \
|
||||
if ((set) & CPACR_EL1_TTA) \
|
||||
cptr |= CPTR_EL2_TTA; \
|
||||
if ((set) & CPTR_EL2_TAM) \
|
||||
cptr |= CPTR_EL2_TAM; \
|
||||
if ((set) & CPTR_EL2_TCPAC) \
|
||||
cptr |= CPTR_EL2_TCPAC; \
|
||||
\
|
||||
cptr; \
|
||||
})
|
||||
|
||||
#define cpacr_clear_set(clr, set) \
|
||||
do { \
|
||||
BUILD_BUG_ON((set) & CPTR_VHE_EL2_RES0); \
|
||||
BUILD_BUG_ON((clr) & CPACR_EL1_E0POE); \
|
||||
__build_check_all_or_none((clr), CPACR_EL1_FPEN); \
|
||||
__build_check_all_or_none((set), CPACR_EL1_FPEN); \
|
||||
__build_check_all_or_none((clr), CPACR_EL1_ZEN); \
|
||||
__build_check_all_or_none((set), CPACR_EL1_ZEN); \
|
||||
__build_check_all_or_none((clr), CPACR_EL1_SMEN); \
|
||||
__build_check_all_or_none((set), CPACR_EL1_SMEN); \
|
||||
\
|
||||
if (has_vhe() || has_hvhe()) \
|
||||
sysreg_clear_set(cpacr_el1, clr, set); \
|
||||
else \
|
||||
sysreg_clear_set(cptr_el2, \
|
||||
__cpacr_to_cptr_clr(clr, set), \
|
||||
__cpacr_to_cptr_set(clr, set));\
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* Returns a 'sanitised' view of CPTR_EL2, translating from nVHE to the VHE
|
||||
* format if E2H isn't set.
|
||||
|
|
|
@ -1289,9 +1289,8 @@ void kvm_arm_resume_guest(struct kvm *kvm);
|
|||
})
|
||||
|
||||
/*
|
||||
* The couple of isb() below are there to guarantee the same behaviour
|
||||
* on VHE as on !VHE, where the eret to EL1 acts as a context
|
||||
* synchronization event.
|
||||
* The isb() below is there to guarantee the same behaviour on VHE as on !VHE,
|
||||
* where the eret to EL1 acts as a context synchronization event.
|
||||
*/
|
||||
#define kvm_call_hyp(f, ...) \
|
||||
do { \
|
||||
|
@ -1309,7 +1308,6 @@ void kvm_arm_resume_guest(struct kvm *kvm);
|
|||
\
|
||||
if (has_vhe()) { \
|
||||
ret = f(__VA_ARGS__); \
|
||||
isb(); \
|
||||
} else { \
|
||||
ret = kvm_call_hyp_nvhe(f, ##__VA_ARGS__); \
|
||||
} \
|
||||
|
|
|
@ -288,7 +288,9 @@ static void flush_gcs(void)
|
|||
if (!system_supports_gcs())
|
||||
return;
|
||||
|
||||
gcs_free(current);
|
||||
current->thread.gcspr_el0 = 0;
|
||||
current->thread.gcs_base = 0;
|
||||
current->thread.gcs_size = 0;
|
||||
current->thread.gcs_el0_mode = 0;
|
||||
write_sysreg_s(GCSCRE0_EL1_nTR, SYS_GCSCRE0_EL1);
|
||||
write_sysreg_s(0, SYS_GCSPR_EL0);
|
||||
|
|
|
@ -141,7 +141,7 @@ unsigned long regs_get_kernel_stack_nth(struct pt_regs *regs, unsigned int n)
|
|||
|
||||
addr += n;
|
||||
if (regs_within_kernel_stack(regs, (unsigned long)addr))
|
||||
return *addr;
|
||||
return READ_ONCE_NOCHECK(*addr);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -2764,7 +2764,8 @@ void kvm_arch_irq_bypass_del_producer(struct irq_bypass_consumer *cons,
|
|||
bool kvm_arch_irqfd_route_changed(struct kvm_kernel_irq_routing_entry *old,
|
||||
struct kvm_kernel_irq_routing_entry *new)
|
||||
{
|
||||
if (new->type != KVM_IRQ_ROUTING_MSI)
|
||||
if (old->type != KVM_IRQ_ROUTING_MSI ||
|
||||
new->type != KVM_IRQ_ROUTING_MSI)
|
||||
return true;
|
||||
|
||||
return memcmp(&old->msi, &new->msi, sizeof(new->msi));
|
||||
|
|
|
@ -65,6 +65,136 @@ static inline void __activate_traps_fpsimd32(struct kvm_vcpu *vcpu)
|
|||
}
|
||||
}
|
||||
|
||||
static inline void __activate_cptr_traps_nvhe(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
u64 val = CPTR_NVHE_EL2_RES1 | CPTR_EL2_TAM | CPTR_EL2_TTA;
|
||||
|
||||
/*
|
||||
* Always trap SME since it's not supported in KVM.
|
||||
* TSM is RES1 if SME isn't implemented.
|
||||
*/
|
||||
val |= CPTR_EL2_TSM;
|
||||
|
||||
if (!vcpu_has_sve(vcpu) || !guest_owns_fp_regs())
|
||||
val |= CPTR_EL2_TZ;
|
||||
|
||||
if (!guest_owns_fp_regs())
|
||||
val |= CPTR_EL2_TFP;
|
||||
|
||||
write_sysreg(val, cptr_el2);
|
||||
}
|
||||
|
||||
static inline void __activate_cptr_traps_vhe(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
/*
|
||||
* With VHE (HCR.E2H == 1), accesses to CPACR_EL1 are routed to
|
||||
* CPTR_EL2. In general, CPACR_EL1 has the same layout as CPTR_EL2,
|
||||
* except for some missing controls, such as TAM.
|
||||
* In this case, CPTR_EL2.TAM has the same position with or without
|
||||
* VHE (HCR.E2H == 1) which allows us to use here the CPTR_EL2.TAM
|
||||
* shift value for trapping the AMU accesses.
|
||||
*/
|
||||
u64 val = CPTR_EL2_TAM | CPACR_EL1_TTA;
|
||||
u64 cptr;
|
||||
|
||||
if (guest_owns_fp_regs()) {
|
||||
val |= CPACR_EL1_FPEN;
|
||||
if (vcpu_has_sve(vcpu))
|
||||
val |= CPACR_EL1_ZEN;
|
||||
}
|
||||
|
||||
if (!vcpu_has_nv(vcpu))
|
||||
goto write;
|
||||
|
||||
/*
|
||||
* The architecture is a bit crap (what a surprise): an EL2 guest
|
||||
* writing to CPTR_EL2 via CPACR_EL1 can't set any of TCPAC or TTA,
|
||||
* as they are RES0 in the guest's view. To work around it, trap the
|
||||
* sucker using the very same bit it can't set...
|
||||
*/
|
||||
if (vcpu_el2_e2h_is_set(vcpu) && is_hyp_ctxt(vcpu))
|
||||
val |= CPTR_EL2_TCPAC;
|
||||
|
||||
/*
|
||||
* Layer the guest hypervisor's trap configuration on top of our own if
|
||||
* we're in a nested context.
|
||||
*/
|
||||
if (is_hyp_ctxt(vcpu))
|
||||
goto write;
|
||||
|
||||
cptr = vcpu_sanitised_cptr_el2(vcpu);
|
||||
|
||||
/*
|
||||
* Pay attention, there's some interesting detail here.
|
||||
*
|
||||
* The CPTR_EL2.xEN fields are 2 bits wide, although there are only two
|
||||
* meaningful trap states when HCR_EL2.TGE = 0 (running a nested guest):
|
||||
*
|
||||
* - CPTR_EL2.xEN = x0, traps are enabled
|
||||
* - CPTR_EL2.xEN = x1, traps are disabled
|
||||
*
|
||||
* In other words, bit[0] determines if guest accesses trap or not. In
|
||||
* the interest of simplicity, clear the entire field if the guest
|
||||
* hypervisor has traps enabled to dispel any illusion of something more
|
||||
* complicated taking place.
|
||||
*/
|
||||
if (!(SYS_FIELD_GET(CPACR_EL1, FPEN, cptr) & BIT(0)))
|
||||
val &= ~CPACR_EL1_FPEN;
|
||||
if (!(SYS_FIELD_GET(CPACR_EL1, ZEN, cptr) & BIT(0)))
|
||||
val &= ~CPACR_EL1_ZEN;
|
||||
|
||||
if (kvm_has_feat(vcpu->kvm, ID_AA64MMFR3_EL1, S2POE, IMP))
|
||||
val |= cptr & CPACR_EL1_E0POE;
|
||||
|
||||
val |= cptr & CPTR_EL2_TCPAC;
|
||||
|
||||
write:
|
||||
write_sysreg(val, cpacr_el1);
|
||||
}
|
||||
|
||||
static inline void __activate_cptr_traps(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
if (!guest_owns_fp_regs())
|
||||
__activate_traps_fpsimd32(vcpu);
|
||||
|
||||
if (has_vhe() || has_hvhe())
|
||||
__activate_cptr_traps_vhe(vcpu);
|
||||
else
|
||||
__activate_cptr_traps_nvhe(vcpu);
|
||||
}
|
||||
|
||||
static inline void __deactivate_cptr_traps_nvhe(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
u64 val = CPTR_NVHE_EL2_RES1;
|
||||
|
||||
if (!cpus_have_final_cap(ARM64_SVE))
|
||||
val |= CPTR_EL2_TZ;
|
||||
if (!cpus_have_final_cap(ARM64_SME))
|
||||
val |= CPTR_EL2_TSM;
|
||||
|
||||
write_sysreg(val, cptr_el2);
|
||||
}
|
||||
|
||||
static inline void __deactivate_cptr_traps_vhe(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
u64 val = CPACR_EL1_FPEN;
|
||||
|
||||
if (cpus_have_final_cap(ARM64_SVE))
|
||||
val |= CPACR_EL1_ZEN;
|
||||
if (cpus_have_final_cap(ARM64_SME))
|
||||
val |= CPACR_EL1_SMEN;
|
||||
|
||||
write_sysreg(val, cpacr_el1);
|
||||
}
|
||||
|
||||
static inline void __deactivate_cptr_traps(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
if (has_vhe() || has_hvhe())
|
||||
__deactivate_cptr_traps_vhe(vcpu);
|
||||
else
|
||||
__deactivate_cptr_traps_nvhe(vcpu);
|
||||
}
|
||||
|
||||
#define reg_to_fgt_masks(reg) \
|
||||
({ \
|
||||
struct fgt_masks *m; \
|
||||
|
@ -486,11 +616,6 @@ static void kvm_hyp_save_fpsimd_host(struct kvm_vcpu *vcpu)
|
|||
*/
|
||||
if (system_supports_sve()) {
|
||||
__hyp_sve_save_host();
|
||||
|
||||
/* Re-enable SVE traps if not supported for the guest vcpu. */
|
||||
if (!vcpu_has_sve(vcpu))
|
||||
cpacr_clear_set(CPACR_EL1_ZEN, 0);
|
||||
|
||||
} else {
|
||||
__fpsimd_save_state(host_data_ptr(host_ctxt.fp_regs));
|
||||
}
|
||||
|
@ -541,10 +666,7 @@ static inline bool kvm_hyp_handle_fpsimd(struct kvm_vcpu *vcpu, u64 *exit_code)
|
|||
/* Valid trap. Switch the context: */
|
||||
|
||||
/* First disable enough traps to allow us to update the registers */
|
||||
if (sve_guest || (is_protected_kvm_enabled() && system_supports_sve()))
|
||||
cpacr_clear_set(0, CPACR_EL1_FPEN | CPACR_EL1_ZEN);
|
||||
else
|
||||
cpacr_clear_set(0, CPACR_EL1_FPEN);
|
||||
__deactivate_cptr_traps(vcpu);
|
||||
isb();
|
||||
|
||||
/* Write out the host state if it's in the registers */
|
||||
|
@ -566,6 +688,13 @@ static inline bool kvm_hyp_handle_fpsimd(struct kvm_vcpu *vcpu, u64 *exit_code)
|
|||
|
||||
*host_data_ptr(fp_owner) = FP_STATE_GUEST_OWNED;
|
||||
|
||||
/*
|
||||
* Re-enable traps necessary for the current state of the guest, e.g.
|
||||
* those enabled by a guest hypervisor. The ERET to the guest will
|
||||
* provide the necessary context synchronization.
|
||||
*/
|
||||
__activate_cptr_traps(vcpu);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -69,7 +69,10 @@ static void fpsimd_sve_sync(struct kvm_vcpu *vcpu)
|
|||
if (!guest_owns_fp_regs())
|
||||
return;
|
||||
|
||||
cpacr_clear_set(0, CPACR_EL1_FPEN | CPACR_EL1_ZEN);
|
||||
/*
|
||||
* Traps have been disabled by __deactivate_cptr_traps(), but there
|
||||
* hasn't necessarily been a context synchronization event yet.
|
||||
*/
|
||||
isb();
|
||||
|
||||
if (vcpu_has_sve(vcpu))
|
||||
|
|
|
@ -47,65 +47,6 @@ struct fgt_masks hdfgwtr2_masks;
|
|||
|
||||
extern void kvm_nvhe_prepare_backtrace(unsigned long fp, unsigned long pc);
|
||||
|
||||
static void __activate_cptr_traps(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
u64 val = CPTR_EL2_TAM; /* Same bit irrespective of E2H */
|
||||
|
||||
if (!guest_owns_fp_regs())
|
||||
__activate_traps_fpsimd32(vcpu);
|
||||
|
||||
if (has_hvhe()) {
|
||||
val |= CPACR_EL1_TTA;
|
||||
|
||||
if (guest_owns_fp_regs()) {
|
||||
val |= CPACR_EL1_FPEN;
|
||||
if (vcpu_has_sve(vcpu))
|
||||
val |= CPACR_EL1_ZEN;
|
||||
}
|
||||
|
||||
write_sysreg(val, cpacr_el1);
|
||||
} else {
|
||||
val |= CPTR_EL2_TTA | CPTR_NVHE_EL2_RES1;
|
||||
|
||||
/*
|
||||
* Always trap SME since it's not supported in KVM.
|
||||
* TSM is RES1 if SME isn't implemented.
|
||||
*/
|
||||
val |= CPTR_EL2_TSM;
|
||||
|
||||
if (!vcpu_has_sve(vcpu) || !guest_owns_fp_regs())
|
||||
val |= CPTR_EL2_TZ;
|
||||
|
||||
if (!guest_owns_fp_regs())
|
||||
val |= CPTR_EL2_TFP;
|
||||
|
||||
write_sysreg(val, cptr_el2);
|
||||
}
|
||||
}
|
||||
|
||||
static void __deactivate_cptr_traps(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
if (has_hvhe()) {
|
||||
u64 val = CPACR_EL1_FPEN;
|
||||
|
||||
if (cpus_have_final_cap(ARM64_SVE))
|
||||
val |= CPACR_EL1_ZEN;
|
||||
if (cpus_have_final_cap(ARM64_SME))
|
||||
val |= CPACR_EL1_SMEN;
|
||||
|
||||
write_sysreg(val, cpacr_el1);
|
||||
} else {
|
||||
u64 val = CPTR_NVHE_EL2_RES1;
|
||||
|
||||
if (!cpus_have_final_cap(ARM64_SVE))
|
||||
val |= CPTR_EL2_TZ;
|
||||
if (!cpus_have_final_cap(ARM64_SME))
|
||||
val |= CPTR_EL2_TSM;
|
||||
|
||||
write_sysreg(val, cptr_el2);
|
||||
}
|
||||
}
|
||||
|
||||
static void __activate_traps(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
___activate_traps(vcpu, vcpu->arch.hcr_el2);
|
||||
|
|
|
@ -90,87 +90,6 @@ static u64 __compute_hcr(struct kvm_vcpu *vcpu)
|
|||
return hcr | (guest_hcr & ~NV_HCR_GUEST_EXCLUDE);
|
||||
}
|
||||
|
||||
static void __activate_cptr_traps(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
u64 cptr;
|
||||
|
||||
/*
|
||||
* With VHE (HCR.E2H == 1), accesses to CPACR_EL1 are routed to
|
||||
* CPTR_EL2. In general, CPACR_EL1 has the same layout as CPTR_EL2,
|
||||
* except for some missing controls, such as TAM.
|
||||
* In this case, CPTR_EL2.TAM has the same position with or without
|
||||
* VHE (HCR.E2H == 1) which allows us to use here the CPTR_EL2.TAM
|
||||
* shift value for trapping the AMU accesses.
|
||||
*/
|
||||
u64 val = CPACR_EL1_TTA | CPTR_EL2_TAM;
|
||||
|
||||
if (guest_owns_fp_regs()) {
|
||||
val |= CPACR_EL1_FPEN;
|
||||
if (vcpu_has_sve(vcpu))
|
||||
val |= CPACR_EL1_ZEN;
|
||||
} else {
|
||||
__activate_traps_fpsimd32(vcpu);
|
||||
}
|
||||
|
||||
if (!vcpu_has_nv(vcpu))
|
||||
goto write;
|
||||
|
||||
/*
|
||||
* The architecture is a bit crap (what a surprise): an EL2 guest
|
||||
* writing to CPTR_EL2 via CPACR_EL1 can't set any of TCPAC or TTA,
|
||||
* as they are RES0 in the guest's view. To work around it, trap the
|
||||
* sucker using the very same bit it can't set...
|
||||
*/
|
||||
if (vcpu_el2_e2h_is_set(vcpu) && is_hyp_ctxt(vcpu))
|
||||
val |= CPTR_EL2_TCPAC;
|
||||
|
||||
/*
|
||||
* Layer the guest hypervisor's trap configuration on top of our own if
|
||||
* we're in a nested context.
|
||||
*/
|
||||
if (is_hyp_ctxt(vcpu))
|
||||
goto write;
|
||||
|
||||
cptr = vcpu_sanitised_cptr_el2(vcpu);
|
||||
|
||||
/*
|
||||
* Pay attention, there's some interesting detail here.
|
||||
*
|
||||
* The CPTR_EL2.xEN fields are 2 bits wide, although there are only two
|
||||
* meaningful trap states when HCR_EL2.TGE = 0 (running a nested guest):
|
||||
*
|
||||
* - CPTR_EL2.xEN = x0, traps are enabled
|
||||
* - CPTR_EL2.xEN = x1, traps are disabled
|
||||
*
|
||||
* In other words, bit[0] determines if guest accesses trap or not. In
|
||||
* the interest of simplicity, clear the entire field if the guest
|
||||
* hypervisor has traps enabled to dispel any illusion of something more
|
||||
* complicated taking place.
|
||||
*/
|
||||
if (!(SYS_FIELD_GET(CPACR_EL1, FPEN, cptr) & BIT(0)))
|
||||
val &= ~CPACR_EL1_FPEN;
|
||||
if (!(SYS_FIELD_GET(CPACR_EL1, ZEN, cptr) & BIT(0)))
|
||||
val &= ~CPACR_EL1_ZEN;
|
||||
|
||||
if (kvm_has_feat(vcpu->kvm, ID_AA64MMFR3_EL1, S2POE, IMP))
|
||||
val |= cptr & CPACR_EL1_E0POE;
|
||||
|
||||
val |= cptr & CPTR_EL2_TCPAC;
|
||||
|
||||
write:
|
||||
write_sysreg(val, cpacr_el1);
|
||||
}
|
||||
|
||||
static void __deactivate_cptr_traps(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
u64 val = CPACR_EL1_FPEN | CPACR_EL1_ZEN_EL1EN;
|
||||
|
||||
if (cpus_have_final_cap(ARM64_SME))
|
||||
val |= CPACR_EL1_SMEN_EL1EN;
|
||||
|
||||
write_sysreg(val, cpacr_el1);
|
||||
}
|
||||
|
||||
static void __activate_traps(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
u64 val;
|
||||
|
@ -639,10 +558,10 @@ static int __kvm_vcpu_run_vhe(struct kvm_vcpu *vcpu)
|
|||
host_ctxt = host_data_ptr(host_ctxt);
|
||||
guest_ctxt = &vcpu->arch.ctxt;
|
||||
|
||||
sysreg_save_host_state_vhe(host_ctxt);
|
||||
|
||||
fpsimd_lazy_switch_to_guest(vcpu);
|
||||
|
||||
sysreg_save_host_state_vhe(host_ctxt);
|
||||
|
||||
/*
|
||||
* Note that ARM erratum 1165522 requires us to configure both stage 1
|
||||
* and stage 2 translation for the guest context before we clear
|
||||
|
@ -667,15 +586,23 @@ static int __kvm_vcpu_run_vhe(struct kvm_vcpu *vcpu)
|
|||
|
||||
__deactivate_traps(vcpu);
|
||||
|
||||
fpsimd_lazy_switch_to_host(vcpu);
|
||||
|
||||
sysreg_restore_host_state_vhe(host_ctxt);
|
||||
|
||||
__debug_switch_to_host(vcpu);
|
||||
|
||||
/*
|
||||
* Ensure that all system register writes above have taken effect
|
||||
* before returning to the host. In VHE mode, CPTR traps for
|
||||
* FPSIMD/SVE/SME also apply to EL2, so FPSIMD/SVE/SME state must be
|
||||
* manipulated after the ISB.
|
||||
*/
|
||||
isb();
|
||||
|
||||
fpsimd_lazy_switch_to_host(vcpu);
|
||||
|
||||
if (guest_owns_fp_regs())
|
||||
__fpsimd_save_fpexc32(vcpu);
|
||||
|
||||
__debug_switch_to_host(vcpu);
|
||||
|
||||
return exit_code;
|
||||
}
|
||||
NOKPROBE_SYMBOL(__kvm_vcpu_run_vhe);
|
||||
|
@ -705,12 +632,6 @@ int __kvm_vcpu_run(struct kvm_vcpu *vcpu)
|
|||
*/
|
||||
local_daif_restore(DAIF_PROCCTX_NOIRQ);
|
||||
|
||||
/*
|
||||
* When we exit from the guest we change a number of CPU configuration
|
||||
* parameters, such as traps. We rely on the isb() in kvm_call_hyp*()
|
||||
* to make sure these changes take effect before running the host or
|
||||
* additional guests.
|
||||
*/
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -36,6 +36,11 @@ struct shadow_if {
|
|||
|
||||
static DEFINE_PER_CPU(struct shadow_if, shadow_if);
|
||||
|
||||
static int lr_map_idx_to_shadow_idx(struct shadow_if *shadow_if, int idx)
|
||||
{
|
||||
return hweight16(shadow_if->lr_map & (BIT(idx) - 1));
|
||||
}
|
||||
|
||||
/*
|
||||
* Nesting GICv3 support
|
||||
*
|
||||
|
@ -209,6 +214,29 @@ u64 vgic_v3_get_misr(struct kvm_vcpu *vcpu)
|
|||
return reg;
|
||||
}
|
||||
|
||||
static u64 translate_lr_pintid(struct kvm_vcpu *vcpu, u64 lr)
|
||||
{
|
||||
struct vgic_irq *irq;
|
||||
|
||||
if (!(lr & ICH_LR_HW))
|
||||
return lr;
|
||||
|
||||
/* We have the HW bit set, check for validity of pINTID */
|
||||
irq = vgic_get_vcpu_irq(vcpu, FIELD_GET(ICH_LR_PHYS_ID_MASK, lr));
|
||||
/* If there was no real mapping, nuke the HW bit */
|
||||
if (!irq || !irq->hw || irq->intid > VGIC_MAX_SPI)
|
||||
lr &= ~ICH_LR_HW;
|
||||
|
||||
/* Translate the virtual mapping to the real one, even if invalid */
|
||||
if (irq) {
|
||||
lr &= ~ICH_LR_PHYS_ID_MASK;
|
||||
lr |= FIELD_PREP(ICH_LR_PHYS_ID_MASK, (u64)irq->hwintid);
|
||||
vgic_put_irq(vcpu->kvm, irq);
|
||||
}
|
||||
|
||||
return lr;
|
||||
}
|
||||
|
||||
/*
|
||||
* For LRs which have HW bit set such as timer interrupts, we modify them to
|
||||
* have the host hardware interrupt number instead of the virtual one programmed
|
||||
|
@ -217,58 +245,37 @@ u64 vgic_v3_get_misr(struct kvm_vcpu *vcpu)
|
|||
static void vgic_v3_create_shadow_lr(struct kvm_vcpu *vcpu,
|
||||
struct vgic_v3_cpu_if *s_cpu_if)
|
||||
{
|
||||
unsigned long lr_map = 0;
|
||||
int index = 0;
|
||||
struct shadow_if *shadow_if;
|
||||
|
||||
shadow_if = container_of(s_cpu_if, struct shadow_if, cpuif);
|
||||
shadow_if->lr_map = 0;
|
||||
|
||||
for (int i = 0; i < kvm_vgic_global_state.nr_lr; i++) {
|
||||
u64 lr = __vcpu_sys_reg(vcpu, ICH_LRN(i));
|
||||
struct vgic_irq *irq;
|
||||
|
||||
if (!(lr & ICH_LR_STATE))
|
||||
lr = 0;
|
||||
continue;
|
||||
|
||||
if (!(lr & ICH_LR_HW))
|
||||
goto next;
|
||||
lr = translate_lr_pintid(vcpu, lr);
|
||||
|
||||
/* We have the HW bit set, check for validity of pINTID */
|
||||
irq = vgic_get_vcpu_irq(vcpu, FIELD_GET(ICH_LR_PHYS_ID_MASK, lr));
|
||||
if (!irq || !irq->hw || irq->intid > VGIC_MAX_SPI ) {
|
||||
/* There was no real mapping, so nuke the HW bit */
|
||||
lr &= ~ICH_LR_HW;
|
||||
if (irq)
|
||||
vgic_put_irq(vcpu->kvm, irq);
|
||||
goto next;
|
||||
}
|
||||
|
||||
/* Translate the virtual mapping to the real one */
|
||||
lr &= ~ICH_LR_PHYS_ID_MASK;
|
||||
lr |= FIELD_PREP(ICH_LR_PHYS_ID_MASK, (u64)irq->hwintid);
|
||||
|
||||
vgic_put_irq(vcpu->kvm, irq);
|
||||
|
||||
next:
|
||||
s_cpu_if->vgic_lr[index] = lr;
|
||||
if (lr) {
|
||||
lr_map |= BIT(i);
|
||||
index++;
|
||||
}
|
||||
s_cpu_if->vgic_lr[hweight16(shadow_if->lr_map)] = lr;
|
||||
shadow_if->lr_map |= BIT(i);
|
||||
}
|
||||
|
||||
container_of(s_cpu_if, struct shadow_if, cpuif)->lr_map = lr_map;
|
||||
s_cpu_if->used_lrs = index;
|
||||
s_cpu_if->used_lrs = hweight16(shadow_if->lr_map);
|
||||
}
|
||||
|
||||
void vgic_v3_sync_nested(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
struct shadow_if *shadow_if = get_shadow_if();
|
||||
int i, index = 0;
|
||||
int i;
|
||||
|
||||
for_each_set_bit(i, &shadow_if->lr_map, kvm_vgic_global_state.nr_lr) {
|
||||
u64 lr = __vcpu_sys_reg(vcpu, ICH_LRN(i));
|
||||
struct vgic_irq *irq;
|
||||
|
||||
if (!(lr & ICH_LR_HW) || !(lr & ICH_LR_STATE))
|
||||
goto next;
|
||||
continue;
|
||||
|
||||
/*
|
||||
* If we had a HW lr programmed by the guest hypervisor, we
|
||||
|
@ -277,15 +284,13 @@ void vgic_v3_sync_nested(struct kvm_vcpu *vcpu)
|
|||
*/
|
||||
irq = vgic_get_vcpu_irq(vcpu, FIELD_GET(ICH_LR_PHYS_ID_MASK, lr));
|
||||
if (WARN_ON(!irq)) /* Shouldn't happen as we check on load */
|
||||
goto next;
|
||||
continue;
|
||||
|
||||
lr = __gic_v3_get_lr(index);
|
||||
lr = __gic_v3_get_lr(lr_map_idx_to_shadow_idx(shadow_if, i));
|
||||
if (!(lr & ICH_LR_STATE))
|
||||
irq->active = false;
|
||||
|
||||
vgic_put_irq(vcpu->kvm, irq);
|
||||
next:
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -368,13 +373,11 @@ void vgic_v3_put_nested(struct kvm_vcpu *vcpu)
|
|||
val = __vcpu_sys_reg(vcpu, ICH_LRN(i));
|
||||
|
||||
val &= ~ICH_LR_STATE;
|
||||
val |= s_cpu_if->vgic_lr[i] & ICH_LR_STATE;
|
||||
val |= s_cpu_if->vgic_lr[lr_map_idx_to_shadow_idx(shadow_if, i)] & ICH_LR_STATE;
|
||||
|
||||
__vcpu_assign_sys_reg(vcpu, ICH_LRN(i), val);
|
||||
s_cpu_if->vgic_lr[i] = 0;
|
||||
}
|
||||
|
||||
shadow_if->lr_map = 0;
|
||||
vcpu->arch.vgic_cpu.vgic_v3.used_lrs = 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -38,14 +38,14 @@ void poly1305_blocks_arch(struct poly1305_block_state *state, const u8 *src,
|
|||
unsigned int todo = min_t(unsigned int, len, SZ_4K);
|
||||
|
||||
kernel_neon_begin();
|
||||
poly1305_blocks_neon(state, src, todo, 1);
|
||||
poly1305_blocks_neon(state, src, todo, padbit);
|
||||
kernel_neon_end();
|
||||
|
||||
len -= todo;
|
||||
src += todo;
|
||||
} while (len);
|
||||
} else
|
||||
poly1305_blocks(state, src, len, 1);
|
||||
poly1305_blocks(state, src, len, padbit);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(poly1305_blocks_arch);
|
||||
|
||||
|
|
|
@ -1305,7 +1305,8 @@ int pud_free_pmd_page(pud_t *pudp, unsigned long addr)
|
|||
next = addr;
|
||||
end = addr + PUD_SIZE;
|
||||
do {
|
||||
pmd_free_pte_page(pmdp, next);
|
||||
if (pmd_present(pmdp_get(pmdp)))
|
||||
pmd_free_pte_page(pmdp, next);
|
||||
} while (pmdp++, next += PMD_SIZE, next != end);
|
||||
|
||||
pud_clear(pudp);
|
||||
|
|
|
@ -18,12 +18,12 @@
|
|||
/*
|
||||
* This gives the physical RAM offset.
|
||||
*/
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
#ifndef PHYS_OFFSET
|
||||
#define PHYS_OFFSET _UL(0)
|
||||
#endif
|
||||
extern unsigned long vm_map_base;
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#ifndef IO_BASE
|
||||
#define IO_BASE CSR_DMW0_BASE
|
||||
|
@ -66,7 +66,7 @@ extern unsigned long vm_map_base;
|
|||
#define FIXADDR_TOP ((unsigned long)(long)(int)0xfffe0000)
|
||||
#endif
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
#ifdef __ASSEMBLER__
|
||||
#define _ATYPE_
|
||||
#define _ATYPE32_
|
||||
#define _ATYPE64_
|
||||
|
@ -85,7 +85,7 @@ extern unsigned long vm_map_base;
|
|||
/*
|
||||
* 32/64-bit LoongArch address spaces
|
||||
*/
|
||||
#ifdef __ASSEMBLY__
|
||||
#ifdef __ASSEMBLER__
|
||||
#define _ACAST32_
|
||||
#define _ACAST64_
|
||||
#else
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
#ifndef _ASM_ALTERNATIVE_ASM_H
|
||||
#define _ASM_ALTERNATIVE_ASM_H
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
#ifdef __ASSEMBLER__
|
||||
|
||||
#include <asm/asm.h>
|
||||
|
||||
|
@ -77,6 +77,6 @@
|
|||
.previous
|
||||
.endm
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif /* _ASM_ALTERNATIVE_ASM_H */
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
#ifndef _ASM_ALTERNATIVE_H
|
||||
#define _ASM_ALTERNATIVE_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/stddef.h>
|
||||
|
@ -106,6 +106,6 @@ extern void apply_alternatives(struct alt_instr *start, struct alt_instr *end);
|
|||
#define alternative_2(oldinstr, newinstr1, feature1, newinstr2, feature2) \
|
||||
(asm volatile(ALTERNATIVE_2(oldinstr, newinstr1, feature1, newinstr2, feature2) ::: "memory"))
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif /* _ASM_ALTERNATIVE_H */
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
#define EX_TYPE_UACCESS_ERR_ZERO 2
|
||||
#define EX_TYPE_BPF 3
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
#ifdef __ASSEMBLER__
|
||||
|
||||
#define __ASM_EXTABLE_RAW(insn, fixup, type, data) \
|
||||
.pushsection __ex_table, "a"; \
|
||||
|
@ -22,7 +22,7 @@
|
|||
__ASM_EXTABLE_RAW(\insn, \fixup, EX_TYPE_FIXUP, 0)
|
||||
.endm
|
||||
|
||||
#else /* __ASSEMBLY__ */
|
||||
#else /* __ASSEMBLER__ */
|
||||
|
||||
#include <linux/bits.h>
|
||||
#include <linux/stringify.h>
|
||||
|
@ -60,6 +60,6 @@
|
|||
#define _ASM_EXTABLE_UACCESS_ERR(insn, fixup, err) \
|
||||
_ASM_EXTABLE_UACCESS_ERR_ZERO(insn, fixup, err, zero)
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif /* __ASM_ASM_EXTABLE_H */
|
||||
|
|
|
@ -110,7 +110,7 @@
|
|||
#define LONG_SRA srai.w
|
||||
#define LONG_SRAV sra.w
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
#ifdef __ASSEMBLER__
|
||||
#define LONG .word
|
||||
#endif
|
||||
#define LONGSIZE 4
|
||||
|
@ -131,7 +131,7 @@
|
|||
#define LONG_SRA srai.d
|
||||
#define LONG_SRAV sra.d
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
#ifdef __ASSEMBLER__
|
||||
#define LONG .dword
|
||||
#endif
|
||||
#define LONGSIZE 8
|
||||
|
@ -158,7 +158,7 @@
|
|||
|
||||
#define PTR_SCALESHIFT 2
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
#ifdef __ASSEMBLER__
|
||||
#define PTR .word
|
||||
#endif
|
||||
#define PTRSIZE 4
|
||||
|
@ -181,7 +181,7 @@
|
|||
|
||||
#define PTR_SCALESHIFT 3
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
#ifdef __ASSEMBLER__
|
||||
#define PTR .dword
|
||||
#endif
|
||||
#define PTRSIZE 8
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
|
||||
#define PRID_PRODUCT_MASK 0x0fff
|
||||
|
||||
#if !defined(__ASSEMBLY__)
|
||||
#if !defined(__ASSEMBLER__)
|
||||
|
||||
enum cpu_type_enum {
|
||||
CPU_UNKNOWN,
|
||||
|
@ -55,7 +55,7 @@ enum cpu_type_enum {
|
|||
CPU_LAST
|
||||
};
|
||||
|
||||
#endif /* !__ASSEMBLY */
|
||||
#endif /* !__ASSEMBLER__ */
|
||||
|
||||
/*
|
||||
* ISA Level encodings
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
#define MCOUNT_INSN_SIZE 4 /* sizeof mcount call */
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#ifndef CONFIG_DYNAMIC_FTRACE
|
||||
|
||||
|
@ -84,7 +84,7 @@ __arch_ftrace_set_direct_caller(struct pt_regs *regs, unsigned long addr)
|
|||
|
||||
#endif
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif /* CONFIG_FUNCTION_TRACER */
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
#ifndef __ASM_GPR_NUM_H
|
||||
#define __ASM_GPR_NUM_H
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
#ifdef __ASSEMBLER__
|
||||
|
||||
.equ .L__gpr_num_zero, 0
|
||||
.irp num,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
|
||||
|
@ -25,7 +25,7 @@
|
|||
.equ .L__gpr_num_$s\num, 23 + \num
|
||||
.endr
|
||||
|
||||
#else /* __ASSEMBLY__ */
|
||||
#else /* __ASSEMBLER__ */
|
||||
|
||||
#define __DEFINE_ASM_GPR_NUMS \
|
||||
" .equ .L__gpr_num_zero, 0\n" \
|
||||
|
@ -47,6 +47,6 @@
|
|||
" .equ .L__gpr_num_$s\\num, 23 + \\num\n" \
|
||||
" .endr\n" \
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif /* __ASM_GPR_NUM_H */
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
#ifndef _ASM_IRQFLAGS_H
|
||||
#define _ASM_IRQFLAGS_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/stringify.h>
|
||||
|
@ -80,6 +80,6 @@ static inline int arch_irqs_disabled(void)
|
|||
return arch_irqs_disabled_flags(arch_local_save_flags());
|
||||
}
|
||||
|
||||
#endif /* #ifndef __ASSEMBLY__ */
|
||||
#endif /* #ifndef __ASSEMBLER__ */
|
||||
|
||||
#endif /* _ASM_IRQFLAGS_H */
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
#ifndef __ASM_JUMP_LABEL_H
|
||||
#define __ASM_JUMP_LABEL_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
|
@ -50,5 +50,5 @@ l_yes:
|
|||
return true;
|
||||
}
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
#endif /* __ASM_JUMP_LABEL_H */
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
#ifndef __ASM_KASAN_H
|
||||
#define __ASM_KASAN_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/mmzone.h>
|
||||
|
|
|
@ -9,15 +9,15 @@
|
|||
#include <linux/linkage.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
#include <larchintrin.h>
|
||||
|
||||
/* CPUCFG */
|
||||
#define read_cpucfg(reg) __cpucfg(reg)
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* !__ASSEMBLER__ */
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
#ifdef __ASSEMBLER__
|
||||
|
||||
/* LoongArch Registers */
|
||||
#define REG_ZERO 0x0
|
||||
|
@ -53,7 +53,7 @@
|
|||
#define REG_S7 0x1e
|
||||
#define REG_S8 0x1f
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
/* Bit fields for CPUCFG registers */
|
||||
#define LOONGARCH_CPUCFG0 0x0
|
||||
|
@ -171,7 +171,7 @@
|
|||
* SW emulation for KVM hypervirsor, see arch/loongarch/include/uapi/asm/kvm_para.h
|
||||
*/
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
/* CSR */
|
||||
#define csr_read32(reg) __csrrd_w(reg)
|
||||
|
@ -187,7 +187,7 @@
|
|||
#define iocsr_write32(val, reg) __iocsrwr_w(val, reg)
|
||||
#define iocsr_write64(val, reg) __iocsrwr_d(val, reg)
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* !__ASSEMBLER__ */
|
||||
|
||||
/* CSR register number */
|
||||
|
||||
|
@ -1195,7 +1195,7 @@
|
|||
#define LOONGARCH_IOCSR_EXTIOI_ROUTE_BASE 0x1c00
|
||||
#define IOCSR_EXTIOI_VECTOR_NUM 256
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
static __always_inline u64 drdtime(void)
|
||||
{
|
||||
|
@ -1357,7 +1357,7 @@ __BUILD_CSR_OP(tlbidx)
|
|||
#define clear_csr_estat(val) \
|
||||
csr_xchg32(~(val), val, LOONGARCH_CSR_ESTAT)
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
/* Generic EntryLo bit definitions */
|
||||
#define ENTRYLO_V (_ULCAST_(1) << 0)
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
#define ORC_TYPE_REGS 3
|
||||
#define ORC_TYPE_REGS_PARTIAL 4
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
/*
|
||||
* This struct is more or less a vastly simplified version of the DWARF Call
|
||||
* Frame Information standard. It contains only the necessary parts of DWARF
|
||||
|
@ -53,6 +53,6 @@ struct orc_entry {
|
|||
unsigned int type:3;
|
||||
unsigned int signal:1;
|
||||
};
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif /* _ORC_TYPES_H */
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
#define HPAGE_MASK (~(HPAGE_SIZE - 1))
|
||||
#define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT)
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/pfn.h>
|
||||
|
@ -110,6 +110,6 @@ extern int __virt_addr_valid(volatile void *kaddr);
|
|||
#include <asm-generic/memory_model.h>
|
||||
#include <asm-generic/getorder.h>
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* !__ASSEMBLER__ */
|
||||
|
||||
#endif /* _ASM_PAGE_H */
|
||||
|
|
|
@ -92,7 +92,7 @@
|
|||
#define PAGE_KERNEL_WUC __pgprot(_PAGE_PRESENT | __READABLE | __WRITEABLE | \
|
||||
_PAGE_GLOBAL | _PAGE_KERN | _CACHE_WUC)
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#define _PAGE_IOREMAP pgprot_val(PAGE_KERNEL_SUC)
|
||||
|
||||
|
@ -127,6 +127,6 @@ static inline pgprot_t pgprot_writecombine(pgprot_t _prot)
|
|||
return __pgprot(prot);
|
||||
}
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* !__ASSEMBLER__ */
|
||||
|
||||
#endif /* _ASM_PGTABLE_BITS_H */
|
||||
|
|
|
@ -55,7 +55,7 @@
|
|||
|
||||
#define USER_PTRS_PER_PGD ((TASK_SIZE64 / PGDIR_SIZE)?(TASK_SIZE64 / PGDIR_SIZE):1)
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <linux/mm_types.h>
|
||||
#include <linux/mmzone.h>
|
||||
|
@ -618,6 +618,6 @@ static inline long pmd_protnone(pmd_t pmd)
|
|||
#define HAVE_ARCH_UNMAPPED_AREA
|
||||
#define HAVE_ARCH_UNMAPPED_AREA_TOPDOWN
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* !__ASSEMBLER__ */
|
||||
|
||||
#endif /* _ASM_PGTABLE_H */
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#define Pref_Load 0
|
||||
#define Pref_Store 8
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
#ifdef __ASSEMBLER__
|
||||
|
||||
.macro __pref hint addr
|
||||
#ifdef CONFIG_CPU_HAS_PREFETCH
|
||||
|
|
|
@ -39,7 +39,7 @@ int loongson_cpu_disable(void);
|
|||
void loongson_cpu_die(unsigned int cpu);
|
||||
#endif
|
||||
|
||||
static inline void plat_smp_setup(void)
|
||||
static inline void __init plat_smp_setup(void)
|
||||
{
|
||||
loongson_smp_setup();
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <asm/processor.h>
|
||||
|
||||
|
@ -53,7 +53,7 @@ static inline struct thread_info *current_thread_info(void)
|
|||
|
||||
register unsigned long current_stack_pointer __asm__("$sp");
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* !__ASSEMBLER__ */
|
||||
|
||||
/* thread information allocation */
|
||||
#define THREAD_SIZE SZ_16K
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#include <asm-generic/int-ll64.h>
|
||||
#include <uapi/asm/types.h>
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
#ifdef __ASSEMBLER__
|
||||
#define _ULCAST_
|
||||
#define _U64CAST_
|
||||
#else
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
#include <linux/objtool.h>
|
||||
#include <asm/orc_types.h>
|
||||
|
||||
#ifdef __ASSEMBLY__
|
||||
#ifdef __ASSEMBLER__
|
||||
|
||||
.macro UNWIND_HINT_UNDEFINED
|
||||
UNWIND_HINT type=UNWIND_HINT_TYPE_UNDEFINED
|
||||
|
@ -23,7 +23,7 @@
|
|||
UNWIND_HINT sp_reg=ORC_REG_SP type=UNWIND_HINT_TYPE_CALL
|
||||
.endm
|
||||
|
||||
#else /* !__ASSEMBLY__ */
|
||||
#else /* !__ASSEMBLER__ */
|
||||
|
||||
#define UNWIND_HINT_SAVE \
|
||||
UNWIND_HINT(UNWIND_HINT_TYPE_SAVE, 0, 0, 0)
|
||||
|
@ -31,6 +31,6 @@
|
|||
#define UNWIND_HINT_RESTORE \
|
||||
UNWIND_HINT(UNWIND_HINT_TYPE_RESTORE, 0, 0, 0)
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* !__ASSEMBLER__ */
|
||||
|
||||
#endif /* _ASM_LOONGARCH_UNWIND_HINTS_H */
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
#ifndef _VDSO_ARCH_DATA_H
|
||||
#define _VDSO_ARCH_DATA_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <asm/asm.h>
|
||||
#include <asm/vdso.h>
|
||||
|
@ -20,6 +20,6 @@ struct vdso_arch_data {
|
|||
struct vdso_pcpu_data pdata[NR_CPUS];
|
||||
};
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
#ifndef __ASM_VDSO_GETRANDOM_H
|
||||
#define __ASM_VDSO_GETRANDOM_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <asm/unistd.h>
|
||||
#include <asm/vdso/vdso.h>
|
||||
|
@ -28,6 +28,6 @@ static __always_inline ssize_t getrandom_syscall(void *_buffer, size_t _len, uns
|
|||
return ret;
|
||||
}
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* !__ASSEMBLER__ */
|
||||
|
||||
#endif /* __ASM_VDSO_GETRANDOM_H */
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
#ifndef __ASM_VDSO_GETTIMEOFDAY_H
|
||||
#define __ASM_VDSO_GETTIMEOFDAY_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <asm/unistd.h>
|
||||
#include <asm/vdso/vdso.h>
|
||||
|
@ -89,6 +89,6 @@ static inline bool loongarch_vdso_hres_capable(void)
|
|||
}
|
||||
#define __arch_vdso_hres_capable loongarch_vdso_hres_capable
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* !__ASSEMBLER__ */
|
||||
|
||||
#endif /* __ASM_VDSO_GETTIMEOFDAY_H */
|
||||
|
|
|
@ -5,10 +5,10 @@
|
|||
#ifndef __ASM_VDSO_PROCESSOR_H
|
||||
#define __ASM_VDSO_PROCESSOR_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#define cpu_relax() barrier()
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif /* __ASM_VDSO_PROCESSOR_H */
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
#ifndef _ASM_VDSO_VDSO_H
|
||||
#define _ASM_VDSO_VDSO_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <asm/asm.h>
|
||||
#include <asm/page.h>
|
||||
|
@ -16,6 +16,6 @@
|
|||
|
||||
#define VVAR_SIZE (VDSO_NR_PAGES << PAGE_SHIFT)
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
||||
#endif
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
#ifndef __ASM_VDSO_VSYSCALL_H
|
||||
#define __ASM_VDSO_VSYSCALL_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#ifndef __ASSEMBLER__
|
||||
|
||||
#include <vdso/datapage.h>
|
||||
|
||||
/* The asm-generic header needs to be included after the definitions above */
|
||||
#include <asm-generic/vdso/vsyscall.h>
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* !__ASSEMBLER__ */
|
||||
|
||||
#endif /* __ASM_VDSO_VSYSCALL_H */
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/efi-bgrt.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/irqdomain.h>
|
||||
#include <linux/memblock.h>
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
#include <linux/export.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/module.h>
|
||||
#include <asm/alternative.h>
|
||||
|
|
|
@ -144,6 +144,18 @@ void __init efi_init(void)
|
|||
if (efi_memmap_init_early(&data) < 0)
|
||||
panic("Unable to map EFI memory map.\n");
|
||||
|
||||
/*
|
||||
* Reserve the physical memory region occupied by the EFI
|
||||
* memory map table (header + descriptors). This is crucial
|
||||
* for kdump, as the kdump kernel relies on this original
|
||||
* memmap passed by the bootloader. Without reservation,
|
||||
* this region could be overwritten by the primary kernel.
|
||||
* Also, set the EFI_PRESERVE_BS_REGIONS flag to indicate that
|
||||
* critical boot services code/data regions like this are preserved.
|
||||
*/
|
||||
memblock_reserve((phys_addr_t)boot_memmap, sizeof(*tbl) + data.size);
|
||||
set_bit(EFI_PRESERVE_BS_REGIONS, &efi.flags);
|
||||
|
||||
early_memunmap(tbl, sizeof(*tbl));
|
||||
}
|
||||
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
|
||||
#include <linux/binfmts.h>
|
||||
#include <linux/elf.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/sched.h>
|
||||
|
||||
#include <asm/cpu-features.h>
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
*/
|
||||
|
||||
#include <linux/cpu.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/init.h>
|
||||
#include <asm/fpu.h>
|
||||
#include <asm/smp.h>
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
#include <linux/export.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq_work.h>
|
||||
|
|
|
@ -102,7 +102,7 @@ static int constant_timer_next_event(unsigned long delta, struct clock_event_dev
|
|||
return 0;
|
||||
}
|
||||
|
||||
static unsigned long __init get_loops_per_jiffy(void)
|
||||
static unsigned long get_loops_per_jiffy(void)
|
||||
{
|
||||
unsigned long lpj = (unsigned long)const_clock_freq;
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#include <linux/kernel.h>
|
||||
#include <linux/kexec.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/extable.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/sched/mm.h>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
* Copyright (C) 2022 Loongson Technology Corporation Limited
|
||||
*/
|
||||
#include <asm/unwind.h>
|
||||
#include <linux/export.h>
|
||||
|
||||
unsigned long unwind_get_return_address(struct unwind_state *state)
|
||||
{
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
#include <linux/objtool.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/objtool.h>
|
||||
#include <linux/sort.h>
|
||||
#include <asm/exception.h>
|
||||
#include <asm/orc_header.h>
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
* Copyright (C) 2022 Loongson Technology Corporation Limited
|
||||
*/
|
||||
#include <linux/cpumask.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/ftrace.h>
|
||||
#include <linux/kallsyms.h>
|
||||
|
||||
|
|
|
@ -9,7 +9,8 @@
|
|||
|
||||
static void eiointc_set_sw_coreisr(struct loongarch_eiointc *s)
|
||||
{
|
||||
int ipnum, cpu, irq_index, irq_mask, irq;
|
||||
int ipnum, cpu, cpuid, irq_index, irq_mask, irq;
|
||||
struct kvm_vcpu *vcpu;
|
||||
|
||||
for (irq = 0; irq < EIOINTC_IRQS; irq++) {
|
||||
ipnum = s->ipmap.reg_u8[irq / 32];
|
||||
|
@ -20,7 +21,12 @@ static void eiointc_set_sw_coreisr(struct loongarch_eiointc *s)
|
|||
irq_index = irq / 32;
|
||||
irq_mask = BIT(irq & 0x1f);
|
||||
|
||||
cpu = s->coremap.reg_u8[irq];
|
||||
cpuid = s->coremap.reg_u8[irq];
|
||||
vcpu = kvm_get_vcpu_by_cpuid(s->kvm, cpuid);
|
||||
if (!vcpu)
|
||||
continue;
|
||||
|
||||
cpu = vcpu->vcpu_id;
|
||||
if (!!(s->coreisr.reg_u32[cpu][irq_index] & irq_mask))
|
||||
set_bit(irq, s->sw_coreisr[cpu][ipnum]);
|
||||
else
|
||||
|
@ -66,20 +72,25 @@ static void eiointc_update_irq(struct loongarch_eiointc *s, int irq, int level)
|
|||
}
|
||||
|
||||
static inline void eiointc_update_sw_coremap(struct loongarch_eiointc *s,
|
||||
int irq, void *pvalue, u32 len, bool notify)
|
||||
int irq, u64 val, u32 len, bool notify)
|
||||
{
|
||||
int i, cpu;
|
||||
u64 val = *(u64 *)pvalue;
|
||||
int i, cpu, cpuid;
|
||||
struct kvm_vcpu *vcpu;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
cpu = val & 0xff;
|
||||
cpuid = val & 0xff;
|
||||
val = val >> 8;
|
||||
|
||||
if (!(s->status & BIT(EIOINTC_ENABLE_CPU_ENCODE))) {
|
||||
cpu = ffs(cpu) - 1;
|
||||
cpu = (cpu >= 4) ? 0 : cpu;
|
||||
cpuid = ffs(cpuid) - 1;
|
||||
cpuid = (cpuid >= 4) ? 0 : cpuid;
|
||||
}
|
||||
|
||||
vcpu = kvm_get_vcpu_by_cpuid(s->kvm, cpuid);
|
||||
if (!vcpu)
|
||||
continue;
|
||||
|
||||
cpu = vcpu->vcpu_id;
|
||||
if (s->sw_coremap[irq + i] == cpu)
|
||||
continue;
|
||||
|
||||
|
@ -305,6 +316,11 @@ static int kvm_eiointc_read(struct kvm_vcpu *vcpu,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (addr & (len - 1)) {
|
||||
kvm_err("%s: eiointc not aligned addr %llx len %d\n", __func__, addr, len);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
vcpu->kvm->stat.eiointc_read_exits++;
|
||||
spin_lock_irqsave(&eiointc->lock, flags);
|
||||
switch (len) {
|
||||
|
@ -398,7 +414,7 @@ static int loongarch_eiointc_writeb(struct kvm_vcpu *vcpu,
|
|||
irq = offset - EIOINTC_COREMAP_START;
|
||||
index = irq;
|
||||
s->coremap.reg_u8[index] = data;
|
||||
eiointc_update_sw_coremap(s, irq, (void *)&data, sizeof(data), true);
|
||||
eiointc_update_sw_coremap(s, irq, data, sizeof(data), true);
|
||||
break;
|
||||
default:
|
||||
ret = -EINVAL;
|
||||
|
@ -436,17 +452,16 @@ static int loongarch_eiointc_writew(struct kvm_vcpu *vcpu,
|
|||
break;
|
||||
case EIOINTC_ENABLE_START ... EIOINTC_ENABLE_END:
|
||||
index = (offset - EIOINTC_ENABLE_START) >> 1;
|
||||
old_data = s->enable.reg_u32[index];
|
||||
old_data = s->enable.reg_u16[index];
|
||||
s->enable.reg_u16[index] = data;
|
||||
/*
|
||||
* 1: enable irq.
|
||||
* update irq when isr is set.
|
||||
*/
|
||||
data = s->enable.reg_u16[index] & ~old_data & s->isr.reg_u16[index];
|
||||
index = index << 1;
|
||||
for (i = 0; i < sizeof(data); i++) {
|
||||
u8 mask = (data >> (i * 8)) & 0xff;
|
||||
eiointc_enable_irq(vcpu, s, index + i, mask, 1);
|
||||
eiointc_enable_irq(vcpu, s, index * 2 + i, mask, 1);
|
||||
}
|
||||
/*
|
||||
* 0: disable irq.
|
||||
|
@ -455,7 +470,7 @@ static int loongarch_eiointc_writew(struct kvm_vcpu *vcpu,
|
|||
data = ~s->enable.reg_u16[index] & old_data & s->isr.reg_u16[index];
|
||||
for (i = 0; i < sizeof(data); i++) {
|
||||
u8 mask = (data >> (i * 8)) & 0xff;
|
||||
eiointc_enable_irq(vcpu, s, index, mask, 0);
|
||||
eiointc_enable_irq(vcpu, s, index * 2 + i, mask, 0);
|
||||
}
|
||||
break;
|
||||
case EIOINTC_BOUNCE_START ... EIOINTC_BOUNCE_END:
|
||||
|
@ -484,7 +499,7 @@ static int loongarch_eiointc_writew(struct kvm_vcpu *vcpu,
|
|||
irq = offset - EIOINTC_COREMAP_START;
|
||||
index = irq >> 1;
|
||||
s->coremap.reg_u16[index] = data;
|
||||
eiointc_update_sw_coremap(s, irq, (void *)&data, sizeof(data), true);
|
||||
eiointc_update_sw_coremap(s, irq, data, sizeof(data), true);
|
||||
break;
|
||||
default:
|
||||
ret = -EINVAL;
|
||||
|
@ -529,10 +544,9 @@ static int loongarch_eiointc_writel(struct kvm_vcpu *vcpu,
|
|||
* update irq when isr is set.
|
||||
*/
|
||||
data = s->enable.reg_u32[index] & ~old_data & s->isr.reg_u32[index];
|
||||
index = index << 2;
|
||||
for (i = 0; i < sizeof(data); i++) {
|
||||
u8 mask = (data >> (i * 8)) & 0xff;
|
||||
eiointc_enable_irq(vcpu, s, index + i, mask, 1);
|
||||
eiointc_enable_irq(vcpu, s, index * 4 + i, mask, 1);
|
||||
}
|
||||
/*
|
||||
* 0: disable irq.
|
||||
|
@ -541,7 +555,7 @@ static int loongarch_eiointc_writel(struct kvm_vcpu *vcpu,
|
|||
data = ~s->enable.reg_u32[index] & old_data & s->isr.reg_u32[index];
|
||||
for (i = 0; i < sizeof(data); i++) {
|
||||
u8 mask = (data >> (i * 8)) & 0xff;
|
||||
eiointc_enable_irq(vcpu, s, index, mask, 0);
|
||||
eiointc_enable_irq(vcpu, s, index * 4 + i, mask, 0);
|
||||
}
|
||||
break;
|
||||
case EIOINTC_BOUNCE_START ... EIOINTC_BOUNCE_END:
|
||||
|
@ -570,7 +584,7 @@ static int loongarch_eiointc_writel(struct kvm_vcpu *vcpu,
|
|||
irq = offset - EIOINTC_COREMAP_START;
|
||||
index = irq >> 2;
|
||||
s->coremap.reg_u32[index] = data;
|
||||
eiointc_update_sw_coremap(s, irq, (void *)&data, sizeof(data), true);
|
||||
eiointc_update_sw_coremap(s, irq, data, sizeof(data), true);
|
||||
break;
|
||||
default:
|
||||
ret = -EINVAL;
|
||||
|
@ -615,10 +629,9 @@ static int loongarch_eiointc_writeq(struct kvm_vcpu *vcpu,
|
|||
* update irq when isr is set.
|
||||
*/
|
||||
data = s->enable.reg_u64[index] & ~old_data & s->isr.reg_u64[index];
|
||||
index = index << 3;
|
||||
for (i = 0; i < sizeof(data); i++) {
|
||||
u8 mask = (data >> (i * 8)) & 0xff;
|
||||
eiointc_enable_irq(vcpu, s, index + i, mask, 1);
|
||||
eiointc_enable_irq(vcpu, s, index * 8 + i, mask, 1);
|
||||
}
|
||||
/*
|
||||
* 0: disable irq.
|
||||
|
@ -627,7 +640,7 @@ static int loongarch_eiointc_writeq(struct kvm_vcpu *vcpu,
|
|||
data = ~s->enable.reg_u64[index] & old_data & s->isr.reg_u64[index];
|
||||
for (i = 0; i < sizeof(data); i++) {
|
||||
u8 mask = (data >> (i * 8)) & 0xff;
|
||||
eiointc_enable_irq(vcpu, s, index, mask, 0);
|
||||
eiointc_enable_irq(vcpu, s, index * 8 + i, mask, 0);
|
||||
}
|
||||
break;
|
||||
case EIOINTC_BOUNCE_START ... EIOINTC_BOUNCE_END:
|
||||
|
@ -656,7 +669,7 @@ static int loongarch_eiointc_writeq(struct kvm_vcpu *vcpu,
|
|||
irq = offset - EIOINTC_COREMAP_START;
|
||||
index = irq >> 3;
|
||||
s->coremap.reg_u64[index] = data;
|
||||
eiointc_update_sw_coremap(s, irq, (void *)&data, sizeof(data), true);
|
||||
eiointc_update_sw_coremap(s, irq, data, sizeof(data), true);
|
||||
break;
|
||||
default:
|
||||
ret = -EINVAL;
|
||||
|
@ -679,6 +692,11 @@ static int kvm_eiointc_write(struct kvm_vcpu *vcpu,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (addr & (len - 1)) {
|
||||
kvm_err("%s: eiointc not aligned addr %llx len %d\n", __func__, addr, len);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
vcpu->kvm->stat.eiointc_write_exits++;
|
||||
spin_lock_irqsave(&eiointc->lock, flags);
|
||||
switch (len) {
|
||||
|
@ -787,7 +805,7 @@ static int kvm_eiointc_ctrl_access(struct kvm_device *dev,
|
|||
int ret = 0;
|
||||
unsigned long flags;
|
||||
unsigned long type = (unsigned long)attr->attr;
|
||||
u32 i, start_irq;
|
||||
u32 i, start_irq, val;
|
||||
void __user *data;
|
||||
struct loongarch_eiointc *s = dev->kvm->arch.eiointc;
|
||||
|
||||
|
@ -795,8 +813,14 @@ static int kvm_eiointc_ctrl_access(struct kvm_device *dev,
|
|||
spin_lock_irqsave(&s->lock, flags);
|
||||
switch (type) {
|
||||
case KVM_DEV_LOONGARCH_EXTIOI_CTRL_INIT_NUM_CPU:
|
||||
if (copy_from_user(&s->num_cpu, data, 4))
|
||||
if (copy_from_user(&val, data, 4))
|
||||
ret = -EFAULT;
|
||||
else {
|
||||
if (val >= EIOINTC_ROUTE_MAX_VCPUS)
|
||||
ret = -EINVAL;
|
||||
else
|
||||
s->num_cpu = val;
|
||||
}
|
||||
break;
|
||||
case KVM_DEV_LOONGARCH_EXTIOI_CTRL_INIT_FEATURE:
|
||||
if (copy_from_user(&s->features, data, 4))
|
||||
|
@ -809,7 +833,7 @@ static int kvm_eiointc_ctrl_access(struct kvm_device *dev,
|
|||
for (i = 0; i < (EIOINTC_IRQS / 4); i++) {
|
||||
start_irq = i * 4;
|
||||
eiointc_update_sw_coremap(s, start_irq,
|
||||
(void *)&s->coremap.reg_u32[i], sizeof(u32), false);
|
||||
s->coremap.reg_u32[i], sizeof(u32), false);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
@ -824,7 +848,7 @@ static int kvm_eiointc_regs_access(struct kvm_device *dev,
|
|||
struct kvm_device_attr *attr,
|
||||
bool is_write)
|
||||
{
|
||||
int addr, cpuid, offset, ret = 0;
|
||||
int addr, cpu, offset, ret = 0;
|
||||
unsigned long flags;
|
||||
void *p = NULL;
|
||||
void __user *data;
|
||||
|
@ -832,7 +856,7 @@ static int kvm_eiointc_regs_access(struct kvm_device *dev,
|
|||
|
||||
s = dev->kvm->arch.eiointc;
|
||||
addr = attr->attr;
|
||||
cpuid = addr >> 16;
|
||||
cpu = addr >> 16;
|
||||
addr &= 0xffff;
|
||||
data = (void __user *)attr->addr;
|
||||
switch (addr) {
|
||||
|
@ -857,8 +881,11 @@ static int kvm_eiointc_regs_access(struct kvm_device *dev,
|
|||
p = &s->isr.reg_u32[offset];
|
||||
break;
|
||||
case EIOINTC_COREISR_START ... EIOINTC_COREISR_END:
|
||||
if (cpu >= s->num_cpu)
|
||||
return -EINVAL;
|
||||
|
||||
offset = (addr - EIOINTC_COREISR_START) / 4;
|
||||
p = &s->coreisr.reg_u32[cpuid][offset];
|
||||
p = &s->coreisr.reg_u32[cpu][offset];
|
||||
break;
|
||||
case EIOINTC_COREMAP_START ... EIOINTC_COREMAP_END:
|
||||
offset = (addr - EIOINTC_COREMAP_START) / 4;
|
||||
|
@ -899,9 +926,15 @@ static int kvm_eiointc_sw_status_access(struct kvm_device *dev,
|
|||
data = (void __user *)attr->addr;
|
||||
switch (addr) {
|
||||
case KVM_DEV_LOONGARCH_EXTIOI_SW_STATUS_NUM_CPU:
|
||||
if (is_write)
|
||||
return ret;
|
||||
|
||||
p = &s->num_cpu;
|
||||
break;
|
||||
case KVM_DEV_LOONGARCH_EXTIOI_SW_STATUS_FEATURE:
|
||||
if (is_write)
|
||||
return ret;
|
||||
|
||||
p = &s->features;
|
||||
break;
|
||||
case KVM_DEV_LOONGARCH_EXTIOI_SW_STATUS_STATE:
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
#include <asm/cpu-features.h>
|
||||
#include <linux/crc32.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/unaligned.h>
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
// Copyright (C) 2019-2020 Arm Ltd.
|
||||
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/kasan-checks.h>
|
||||
#include <linux/kernel.h>
|
||||
|
||||
|
|
|
@ -16,12 +16,12 @@ void __init early_iounmap(void __iomem *addr, unsigned long size)
|
|||
|
||||
}
|
||||
|
||||
void *early_memremap_ro(resource_size_t phys_addr, unsigned long size)
|
||||
void * __init early_memremap_ro(resource_size_t phys_addr, unsigned long size)
|
||||
{
|
||||
return early_memremap(phys_addr, size);
|
||||
}
|
||||
|
||||
void *early_memremap_prot(resource_size_t phys_addr, unsigned long size,
|
||||
void * __init early_memremap_prot(resource_size_t phys_addr, unsigned long size,
|
||||
unsigned long prot_val)
|
||||
{
|
||||
return early_memremap(phys_addr, size);
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
* Copyright (C) 2020-2022 Loongson Technology Corporation Limited
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/types.h>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
/ {
|
||||
#size-cells = <0x02>;
|
||||
#address-cells = <0x02>;
|
||||
model-name = "microwatt";
|
||||
model = "microwatt";
|
||||
compatible = "microwatt-soc";
|
||||
|
||||
aliases {
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
*/
|
||||
|
||||
/dts-v1/;
|
||||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
|
||||
/ {
|
||||
compatible = "fsl,mpc8315erdb";
|
||||
|
@ -358,6 +359,15 @@
|
|||
interrupt-parent = <&ipic>;
|
||||
fsl,mpc8313-wakeup-timer = <>m1>;
|
||||
};
|
||||
|
||||
gpio: gpio-controller@c00 {
|
||||
compatible = "fsl,mpc8314-gpio";
|
||||
reg = <0xc00 0x100>;
|
||||
interrupts = <74 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-parent = <&ipic>;
|
||||
gpio-controller;
|
||||
#gpio-cells = <2>;
|
||||
};
|
||||
};
|
||||
|
||||
pci0: pci@e0008500 {
|
||||
|
|
|
@ -183,7 +183,7 @@
|
|||
/*
|
||||
* Used to name C functions called from asm
|
||||
*/
|
||||
#ifdef CONFIG_PPC_KERNEL_PCREL
|
||||
#if defined(__powerpc64__) && defined(CONFIG_PPC_KERNEL_PCREL)
|
||||
#define CFUNC(name) name@notoc
|
||||
#else
|
||||
#define CFUNC(name) name
|
||||
|
|
|
@ -23,10 +23,10 @@
|
|||
#define TCSETSW _IOW('t', 21, struct termios)
|
||||
#define TCSETSF _IOW('t', 22, struct termios)
|
||||
|
||||
#define TCGETA _IOR('t', 23, struct termio)
|
||||
#define TCSETA _IOW('t', 24, struct termio)
|
||||
#define TCSETAW _IOW('t', 25, struct termio)
|
||||
#define TCSETAF _IOW('t', 28, struct termio)
|
||||
#define TCGETA 0x40147417 /* _IOR('t', 23, struct termio) */
|
||||
#define TCSETA 0x80147418 /* _IOW('t', 24, struct termio) */
|
||||
#define TCSETAW 0x80147419 /* _IOW('t', 25, struct termio) */
|
||||
#define TCSETAF 0x8014741c /* _IOW('t', 28, struct termio) */
|
||||
|
||||
#define TCSBRK _IO('t', 29)
|
||||
#define TCXONC _IO('t', 30)
|
||||
|
|
|
@ -1509,6 +1509,8 @@ int eeh_pe_configure(struct eeh_pe *pe)
|
|||
/* Invalid PE ? */
|
||||
if (!pe)
|
||||
return -ENODEV;
|
||||
else
|
||||
ret = eeh_ops->configure_bridge(pe);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -53,7 +53,7 @@ ldflags-$(CONFIG_LD_ORPHAN_WARN) += -Wl,--orphan-handling=$(CONFIG_LD_ORPHAN_WAR
|
|||
ldflags-y += $(filter-out $(CC_AUTO_VAR_INIT_ZERO_ENABLER) $(CC_FLAGS_FTRACE) -Wa$(comma)%, $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS))
|
||||
|
||||
CC32FLAGS := -m32
|
||||
CC32FLAGSREMOVE := -mcmodel=medium -mabi=elfv1 -mabi=elfv2 -mcall-aixdesc
|
||||
CC32FLAGSREMOVE := -mcmodel=medium -mabi=elfv1 -mabi=elfv2 -mcall-aixdesc -mpcrel
|
||||
ifdef CONFIG_CC_IS_CLANG
|
||||
# This flag is supported by clang for 64-bit but not 32-bit so it will cause
|
||||
# an unused command line flag warning for this file.
|
||||
|
|
|
@ -1075,7 +1075,6 @@ static inline pte_t pte_swp_clear_exclusive(pte_t pte)
|
|||
*/
|
||||
#ifdef CONFIG_64BIT
|
||||
#define TASK_SIZE_64 (PGDIR_SIZE * PTRS_PER_PGD / 2)
|
||||
#define TASK_SIZE_MAX LONG_MAX
|
||||
|
||||
#ifdef CONFIG_COMPAT
|
||||
#define TASK_SIZE_32 (_AC(0x80000000, UL) - PAGE_SIZE)
|
||||
|
|
|
@ -206,7 +206,7 @@ static inline void __runtime_fixup_32(__le16 *lui_parcel, __le16 *addi_parcel, u
|
|||
addi_insn_mask &= 0x07fff;
|
||||
}
|
||||
|
||||
if (lower_immediate & 0x00000fff) {
|
||||
if (lower_immediate & 0x00000fff || lui_insn == RISCV_INSN_NOP4) {
|
||||
/* replace upper 12 bits of addi with lower 12 bits of val */
|
||||
addi_insn &= addi_insn_mask;
|
||||
addi_insn |= (lower_immediate & 0x00000fff) << 20;
|
||||
|
|
|
@ -127,6 +127,7 @@ do { \
|
|||
|
||||
#ifdef CONFIG_CC_HAS_ASM_GOTO_OUTPUT
|
||||
#define __get_user_8(x, ptr, label) \
|
||||
do { \
|
||||
u32 __user *__ptr = (u32 __user *)(ptr); \
|
||||
u32 __lo, __hi; \
|
||||
asm_goto_output( \
|
||||
|
@ -141,7 +142,7 @@ do { \
|
|||
: : label); \
|
||||
(x) = (__typeof__(x))((__typeof__((x) - (x)))( \
|
||||
(((u64)__hi << 32) | __lo))); \
|
||||
|
||||
} while (0)
|
||||
#else /* !CONFIG_CC_HAS_ASM_GOTO_OUTPUT */
|
||||
#define __get_user_8(x, ptr, label) \
|
||||
do { \
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue