forked from Minki/linux
A few MIPS fixes:
- Fix VDSO time-related function behavior for systems where we need to fall back to syscalls, but were instead returning bogus results. - A fix to TLB exception handlers for Cavium Octeon systems where they would inadvertently clobber the $1/$at register. - A build fix for bcm63xx configurations. - Switch to using my @kernel.org email address. -----BEGIN PGP SIGNATURE----- iIwEABYIADQWIQRgLjeFAZEXQzy86/s+p5+stXUA3QUCXbTEbhYccGF1bGJ1cnRv bkBrZXJuZWwub3JnAAoJED6nn6y1dQDd+HsBAJ2Zvzlm+CftfNTPbG1SihhyH3s4 edn8VuexsPJp+TjJAP9UZHPQj35tvS5MWYRg0YsNz9HYPTVclYdEsLS9KbSMCw== =YNU+ -----END PGP SIGNATURE----- gpgsig -----BEGIN PGP SIGNATURE----- iIwEABYIADQWIQRgLjeFAZEXQzy86/s+p5+stXUA3QUCXbylbRYccGF1bGJ1cnRv bkBrZXJuZWwub3JnAAoJED6nn6y1dQDd3JkA/2zyRKMikSbQjyr3E2XRnx0HwIUa UjeQvSR0+wofAI0VAP9D3IzB0ugAsGawUSWeYHK5CXBoSrsFNasjxNBT/G1MDA== =duXm -----END PGP SIGNATURE----- Merge tag 'mips_fixes_5.4_3' into mips-next Pull in mips-fixes primarily to gain build fixes in order to allow better testing of mips-next. A few MIPS fixes: - Fix VDSO time-related function behavior for systems where we need to fall back to syscalls, but were instead returning bogus results. - A fix to TLB exception handlers for Cavium Octeon systems where they would inadvertently clobber the $1/$at register. - A build fix for bcm63xx configurations. - Switch to using my @kernel.org email address. Signed-off-by: Paul Burton <paulburton@kernel.org>
This commit is contained in:
commit
02fce139fd
3
.mailmap
3
.mailmap
@ -196,7 +196,8 @@ Oleksij Rempel <linux@rempel-privat.de> <o.rempel@pengutronix.de>
|
||||
Oleksij Rempel <linux@rempel-privat.de> <ore@pengutronix.de>
|
||||
Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
|
||||
Patrick Mochel <mochel@digitalimplant.org>
|
||||
Paul Burton <paul.burton@mips.com> <paul.burton@imgtec.com>
|
||||
Paul Burton <paulburton@kernel.org> <paul.burton@imgtec.com>
|
||||
Paul Burton <paulburton@kernel.org> <paul.burton@mips.com>
|
||||
Peter A Jonsson <pj@ludd.ltu.se>
|
||||
Peter Oruba <peter@oruba.de>
|
||||
Peter Oruba <peter.oruba@amd.com>
|
||||
|
4
CREDITS
4
CREDITS
@ -1637,6 +1637,10 @@ S: Panoramastrasse 18
|
||||
S: D-69126 Heidelberg
|
||||
S: Germany
|
||||
|
||||
N: Simon Horman
|
||||
M: horms@verge.net.au
|
||||
D: Renesas ARM/ARM64 SoC maintainer
|
||||
|
||||
N: Christopher Horn
|
||||
E: chorn@warwick.net
|
||||
D: Miscellaneous sysctl hacks
|
||||
|
@ -615,8 +615,8 @@ on an IO device and is an example of this type.
|
||||
Protections
|
||||
-----------
|
||||
|
||||
A cgroup is protected to be allocated upto the configured amount of
|
||||
the resource if the usages of all its ancestors are under their
|
||||
A cgroup is protected upto the configured amount of the resource
|
||||
as long as the usages of all its ancestors are under their
|
||||
protected levels. Protections can be hard guarantees or best effort
|
||||
soft boundaries. Protections can also be over-committed in which case
|
||||
only upto the amount available to the parent is protected among
|
||||
@ -1096,7 +1096,10 @@ PAGE_SIZE multiple when read back.
|
||||
is within its effective min boundary, the cgroup's memory
|
||||
won't be reclaimed under any conditions. If there is no
|
||||
unprotected reclaimable memory available, OOM killer
|
||||
is invoked.
|
||||
is invoked. Above the effective min boundary (or
|
||||
effective low boundary if it is higher), pages are reclaimed
|
||||
proportionally to the overage, reducing reclaim pressure for
|
||||
smaller overages.
|
||||
|
||||
Effective min boundary is limited by memory.min values of
|
||||
all ancestor cgroups. If there is memory.min overcommitment
|
||||
@ -1118,7 +1121,10 @@ PAGE_SIZE multiple when read back.
|
||||
Best-effort memory protection. If the memory usage of a
|
||||
cgroup is within its effective low boundary, the cgroup's
|
||||
memory won't be reclaimed unless memory can be reclaimed
|
||||
from unprotected cgroups.
|
||||
from unprotected cgroups. Above the effective low boundary (or
|
||||
effective min boundary if it is higher), pages are reclaimed
|
||||
proportionally to the overage, reducing reclaim pressure for
|
||||
smaller overages.
|
||||
|
||||
Effective low boundary is limited by memory.low values of
|
||||
all ancestor cgroups. If there is memory.low overcommitment
|
||||
@ -2482,8 +2488,10 @@ system performance due to overreclaim, to the point where the feature
|
||||
becomes self-defeating.
|
||||
|
||||
The memory.low boundary on the other hand is a top-down allocated
|
||||
reserve. A cgroup enjoys reclaim protection when it's within its low,
|
||||
which makes delegation of subtrees possible.
|
||||
reserve. A cgroup enjoys reclaim protection when it's within its
|
||||
effective low, which makes delegation of subtrees possible. It also
|
||||
enjoys having reclaim pressure proportional to its overage when
|
||||
above its effective low.
|
||||
|
||||
The original high boundary, the hard limit, is defined as a strict
|
||||
limit that can not budge, even if the OOM killer has to be called.
|
||||
|
@ -5302,6 +5302,10 @@
|
||||
the unplug protocol
|
||||
never -- do not unplug even if version check succeeds
|
||||
|
||||
xen_legacy_crash [X86,XEN]
|
||||
Crash from Xen panic notifier, without executing late
|
||||
panic() code such as dumping handler.
|
||||
|
||||
xen_nopvspin [X86,XEN]
|
||||
Disables the ticketlock slowpath using Xen PV
|
||||
optimizations.
|
||||
|
@ -154,11 +154,18 @@ return virtual addresses to userspace from a 48-bit range.
|
||||
|
||||
Software can "opt-in" to receiving VAs from a 52-bit space by
|
||||
specifying an mmap hint parameter that is larger than 48-bit.
|
||||
|
||||
For example:
|
||||
maybe_high_address = mmap(~0UL, size, prot, flags,...);
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
maybe_high_address = mmap(~0UL, size, prot, flags,...);
|
||||
|
||||
It is also possible to build a debug kernel that returns addresses
|
||||
from a 52-bit space by enabling the following kernel config options:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
CONFIG_EXPERT=y && CONFIG_ARM64_FORCE_52BIT=y
|
||||
|
||||
Note that this option is only intended for debugging applications
|
||||
|
@ -38,6 +38,7 @@ Core utilities
|
||||
protection-keys
|
||||
../RCU/index
|
||||
gcc-plugins
|
||||
symbol-namespaces
|
||||
|
||||
|
||||
Interfaces for kernel debugging
|
||||
|
@ -98,6 +98,10 @@ limited. The actual limit depends on the hardware and the kernel
|
||||
configuration, but it is a good practice to use `kmalloc` for objects
|
||||
smaller than page size.
|
||||
|
||||
The address of a chunk allocated with `kmalloc` is aligned to at least
|
||||
ARCH_KMALLOC_MINALIGN bytes. For sizes which are a power of two, the
|
||||
alignment is also guaranteed to be at least the respective size.
|
||||
|
||||
For large allocations you can use :c:func:`vmalloc` and
|
||||
:c:func:`vzalloc`, or directly request pages from the page
|
||||
allocator. The memory allocated by `vmalloc` and related functions is
|
||||
|
@ -89,6 +89,22 @@ To build, save output files in a separate directory with KBUILD_OUTPUT ::
|
||||
|
||||
$ export KBUILD_OUTPUT=/tmp/kselftest; make TARGETS="size timers" kselftest
|
||||
|
||||
Additionally you can use the "SKIP_TARGETS" variable on the make command
|
||||
line to specify one or more targets to exclude from the TARGETS list.
|
||||
|
||||
To run all tests but a single subsystem::
|
||||
|
||||
$ make -C tools/testing/selftests SKIP_TARGETS=ptrace run_tests
|
||||
|
||||
You can specify multiple tests to skip::
|
||||
|
||||
$ make SKIP_TARGETS="size timers" kselftest
|
||||
|
||||
You can also specify a restricted list of tests to run together with a
|
||||
dedicated skiplist::
|
||||
|
||||
$ make TARGETS="bpf breakpoints size timers" SKIP_TARGETS=bpf kselftest
|
||||
|
||||
See the top-level tools/testing/selftests/Makefile for the list of all
|
||||
possible targets.
|
||||
|
||||
|
@ -26,6 +26,8 @@ Required properties:
|
||||
- "renesas,hscif-r8a77470" for R8A77470 (RZ/G1C) HSCIF compatible UART.
|
||||
- "renesas,scif-r8a774a1" for R8A774A1 (RZ/G2M) SCIF compatible UART.
|
||||
- "renesas,hscif-r8a774a1" for R8A774A1 (RZ/G2M) HSCIF compatible UART.
|
||||
- "renesas,scif-r8a774b1" for R8A774B1 (RZ/G2N) SCIF compatible UART.
|
||||
- "renesas,hscif-r8a774b1" for R8A774B1 (RZ/G2N) HSCIF compatible UART.
|
||||
- "renesas,scif-r8a774c0" for R8A774C0 (RZ/G2E) SCIF compatible UART.
|
||||
- "renesas,hscif-r8a774c0" for R8A774C0 (RZ/G2E) HSCIF compatible UART.
|
||||
- "renesas,scif-r8a7778" for R8A7778 (R-Car M1) SCIF compatible UART.
|
||||
|
@ -85,8 +85,8 @@ A child node must exist to represent the core DWC2 IP block. The name of
|
||||
the node is not important. The content of the node is defined in dwc2.txt.
|
||||
|
||||
PHY documentation is provided in the following places:
|
||||
- Documentation/devicetree/bindings/phy/meson-g12a-usb2-phy.txt
|
||||
- Documentation/devicetree/bindings/phy/meson-g12a-usb3-pcie-phy.txt
|
||||
- Documentation/devicetree/bindings/phy/amlogic,meson-g12a-usb2-phy.yaml
|
||||
- Documentation/devicetree/bindings/phy/amlogic,meson-g12a-usb3-pcie-phy.yaml
|
||||
|
||||
Example device nodes:
|
||||
usb: usb@ffe09000 {
|
||||
|
@ -63,7 +63,11 @@ properties:
|
||||
description:
|
||||
Set this flag to force EHCI reset after resume.
|
||||
|
||||
phys: true
|
||||
phys:
|
||||
description: PHY specifier for the USB PHY
|
||||
|
||||
phy-names:
|
||||
const: usb
|
||||
|
||||
required:
|
||||
- compatible
|
||||
@ -89,6 +93,7 @@ examples:
|
||||
interrupts = <39>;
|
||||
clocks = <&ahb_gates 1>;
|
||||
phys = <&usbphy 1>;
|
||||
phy-names = "usb";
|
||||
};
|
||||
|
||||
...
|
||||
|
@ -67,7 +67,11 @@ properties:
|
||||
description:
|
||||
Overrides the detected port count
|
||||
|
||||
phys: true
|
||||
phys:
|
||||
description: PHY specifier for the USB PHY
|
||||
|
||||
phy-names:
|
||||
const: usb
|
||||
|
||||
required:
|
||||
- compatible
|
||||
@ -84,6 +88,7 @@ examples:
|
||||
interrupts = <64>;
|
||||
clocks = <&usb_clk 6>, <&ahb_gates 2>;
|
||||
phys = <&usbphy 1>;
|
||||
phy-names = "usb";
|
||||
};
|
||||
|
||||
...
|
||||
|
@ -33,7 +33,7 @@ Required properties:
|
||||
"dma_ck": dma_bus clock for data transfer by DMA,
|
||||
"xhci_ck": controller clock
|
||||
|
||||
- phys : see usb-hcd.txt in the current directory
|
||||
- phys : see usb-hcd.yaml in the current directory
|
||||
|
||||
Optional properties:
|
||||
- wakeup-source : enable USB remote wakeup;
|
||||
@ -53,7 +53,7 @@ Optional properties:
|
||||
See: Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt
|
||||
- imod-interval-ns: default interrupt moderation interval is 5000ns
|
||||
|
||||
additionally the properties from usb-hcd.txt (in the current directory) are
|
||||
additionally the properties from usb-hcd.yaml (in the current directory) are
|
||||
supported.
|
||||
|
||||
Example:
|
||||
|
@ -17,7 +17,7 @@ Required properties:
|
||||
- clock-names : must contain "sys_ck" for clock of controller,
|
||||
the following clocks are optional:
|
||||
"ref_ck", "mcu_ck" and "dma_ck";
|
||||
- phys : see usb-hcd.txt in the current directory
|
||||
- phys : see usb-hcd.yaml in the current directory
|
||||
- dr_mode : should be one of "host", "peripheral" or "otg",
|
||||
refer to usb/generic.txt
|
||||
|
||||
@ -60,7 +60,7 @@ Optional properties:
|
||||
- mediatek,u3p-dis-msk : mask to disable u3ports, bit0 for u3port0,
|
||||
bit1 for u3port1, ... etc;
|
||||
|
||||
additionally the properties from usb-hcd.txt (in the current directory) are
|
||||
additionally the properties from usb-hcd.yaml (in the current directory) are
|
||||
supported.
|
||||
|
||||
Sub-nodes:
|
||||
|
@ -18,8 +18,13 @@ properties:
|
||||
description:
|
||||
List of all the USB PHYs on this HCD
|
||||
|
||||
phy-names:
|
||||
description:
|
||||
Name specifier for the USB PHY
|
||||
|
||||
examples:
|
||||
- |
|
||||
usb {
|
||||
phys = <&usb2_phy1>, <&usb3_phy1>;
|
||||
phy-names = "usb";
|
||||
};
|
||||
|
@ -6,7 +6,7 @@ Required properties:
|
||||
- reg : Should contain 1 register ranges(address and length)
|
||||
- interrupts : UHCI controller interrupt
|
||||
|
||||
additionally the properties from usb-hcd.txt (in the current directory) are
|
||||
additionally the properties from usb-hcd.yaml (in the current directory) are
|
||||
supported.
|
||||
|
||||
Example:
|
||||
|
@ -41,9 +41,9 @@ Optional properties:
|
||||
- usb3-lpm-capable: determines if platform is USB3 LPM capable
|
||||
- quirk-broken-port-ped: set if the controller has broken port disable mechanism
|
||||
- imod-interval-ns: default interrupt moderation interval is 5000ns
|
||||
- phys : see usb-hcd.txt in the current directory
|
||||
- phys : see usb-hcd.yaml in the current directory
|
||||
|
||||
additionally the properties from usb-hcd.txt (in the current directory) are
|
||||
additionally the properties from usb-hcd.yaml (in the current directory) are
|
||||
supported.
|
||||
|
||||
|
||||
|
@ -7,6 +7,7 @@ Linux Hardware Monitoring
|
||||
|
||||
hwmon-kernel-api
|
||||
pmbus-core
|
||||
inspur-ipsps1
|
||||
submitting-patches
|
||||
sysfs-interface
|
||||
userspace-tools
|
||||
|
@ -1,5 +1,5 @@
|
||||
Kernel driver inspur-ipsps1
|
||||
=======================
|
||||
===========================
|
||||
|
||||
Supported chips:
|
||||
|
||||
|
@ -21,10 +21,17 @@ Supported chips:
|
||||
|
||||
* AMD Family 14h processors: "Brazos" (C/E/G/Z-Series)
|
||||
|
||||
* AMD Family 15h processors: "Bulldozer" (FX-Series), "Trinity", "Kaveri", "Carrizo"
|
||||
* AMD Family 15h processors: "Bulldozer" (FX-Series), "Trinity", "Kaveri",
|
||||
"Carrizo", "Stoney Ridge", "Bristol Ridge"
|
||||
|
||||
* AMD Family 16h processors: "Kabini", "Mullins"
|
||||
|
||||
* AMD Family 17h processors: "Zen", "Zen 2"
|
||||
|
||||
* AMD Family 18h processors: "Hygon Dhyana"
|
||||
|
||||
* AMD Family 19h processors: "Zen 3"
|
||||
|
||||
Prefix: 'k10temp'
|
||||
|
||||
Addresses scanned: PCI space
|
||||
@ -110,3 +117,12 @@ The maximum value for Tctl is available in the file temp1_max.
|
||||
If the BIOS has enabled hardware temperature control, the threshold at
|
||||
which the processor will throttle itself to avoid damage is available in
|
||||
temp1_crit and temp1_crit_hyst.
|
||||
|
||||
On some AMD CPUs, there is a difference between the die temperature (Tdie) and
|
||||
the reported temperature (Tctl). Tdie is the real measured temperature, and
|
||||
Tctl is used for fan control. While Tctl is always available as temp1_input,
|
||||
the driver exports Tdie temperature as temp2_input for those CPUs which support
|
||||
it.
|
||||
|
||||
Models from 17h family report relative temperature, the driver aims to
|
||||
compensate and report the real temperature.
|
||||
|
@ -56,7 +56,7 @@ instead of ``double-indenting`` the ``case`` labels. E.g.:
|
||||
case 'K':
|
||||
case 'k':
|
||||
mem <<= 10;
|
||||
/* fall through */
|
||||
fallthrough;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -122,14 +122,27 @@ memory adjacent to the stack (when built without `CONFIG_VMAP_STACK=y`)
|
||||
|
||||
Implicit switch case fall-through
|
||||
---------------------------------
|
||||
The C language allows switch cases to "fall through" when
|
||||
a "break" statement is missing at the end of a case. This,
|
||||
however, introduces ambiguity in the code, as it's not always
|
||||
clear if the missing break is intentional or a bug. As there
|
||||
have been a long list of flaws `due to missing "break" statements
|
||||
The C language allows switch cases to "fall-through" when a "break" statement
|
||||
is missing at the end of a case. This, however, introduces ambiguity in the
|
||||
code, as it's not always clear if the missing break is intentional or a bug.
|
||||
|
||||
As there have been a long list of flaws `due to missing "break" statements
|
||||
<https://cwe.mitre.org/data/definitions/484.html>`_, we no longer allow
|
||||
"implicit fall-through". In order to identify an intentional fall-through
|
||||
case, we have adopted the marking used by static analyzers: a comment
|
||||
saying `/* Fall through */`. Once the C++17 `__attribute__((fallthrough))`
|
||||
is more widely handled by C compilers, static analyzers, and IDEs, we can
|
||||
switch to using that instead.
|
||||
"implicit fall-through".
|
||||
|
||||
In order to identify intentional fall-through cases, we have adopted a
|
||||
pseudo-keyword macro 'fallthrough' which expands to gcc's extension
|
||||
__attribute__((__fallthrough__)). `Statement Attributes
|
||||
<https://gcc.gnu.org/onlinedocs/gcc/Statement-Attributes.html>`_
|
||||
|
||||
When the C17/C18 [[fallthrough]] syntax is more commonly supported by
|
||||
C compilers, static analyzers, and IDEs, we can switch to using that syntax
|
||||
for the macro pseudo-keyword.
|
||||
|
||||
All switch/case blocks must end in one of:
|
||||
|
||||
break;
|
||||
fallthrough;
|
||||
continue;
|
||||
goto <label>;
|
||||
return [expression];
|
||||
|
@ -1,109 +0,0 @@
|
||||
============
|
||||
Diamonds Rio
|
||||
============
|
||||
|
||||
Copyright (C) 1999, 2000 Bruce Tenison
|
||||
|
||||
Portions Copyright (C) 1999, 2000 David Nelson
|
||||
|
||||
Thanks to David Nelson for guidance and the usage of the scanner.txt
|
||||
and scanner.c files to model our driver and this informative file.
|
||||
|
||||
Mar. 2, 2000
|
||||
|
||||
Changes
|
||||
=======
|
||||
|
||||
- Initial Revision
|
||||
|
||||
|
||||
Overview
|
||||
========
|
||||
|
||||
This README will address issues regarding how to configure the kernel
|
||||
to access a RIO 500 mp3 player.
|
||||
Before I explain how to use this to access the Rio500 please be warned:
|
||||
|
||||
.. warning::
|
||||
|
||||
Please note that this software is still under development. The authors
|
||||
are in no way responsible for any damage that may occur, no matter how
|
||||
inconsequential.
|
||||
|
||||
It seems that the Rio has a problem when sending .mp3 with low batteries.
|
||||
I suggest when the batteries are low and you want to transfer stuff that you
|
||||
replace it with a fresh one. In my case, what happened is I lost two 16kb
|
||||
blocks (they are no longer usable to store information to it). But I don't
|
||||
know if that's normal or not; it could simply be a problem with the flash
|
||||
memory.
|
||||
|
||||
In an extreme case, I left my Rio playing overnight and the batteries wore
|
||||
down to nothing and appear to have corrupted the flash memory. My RIO
|
||||
needed to be replaced as a result. Diamond tech support is aware of the
|
||||
problem. Do NOT allow your batteries to wear down to nothing before
|
||||
changing them. It appears RIO 500 firmware does not handle low battery
|
||||
power well at all.
|
||||
|
||||
On systems with OHCI controllers, the kernel OHCI code appears to have
|
||||
power on problems with some chipsets. If you are having problems
|
||||
connecting to your RIO 500, try turning it on first and then plugging it
|
||||
into the USB cable.
|
||||
|
||||
Contact Information
|
||||
-------------------
|
||||
|
||||
The main page for the project is hosted at sourceforge.net in the following
|
||||
URL: <http://rio500.sourceforge.net>. You can also go to the project's
|
||||
sourceforge home page at: <http://sourceforge.net/projects/rio500/>.
|
||||
There is also a mailing list: rio500-users@lists.sourceforge.net
|
||||
|
||||
Authors
|
||||
-------
|
||||
|
||||
Most of the code was written by Cesar Miquel <miquel@df.uba.ar>. Keith
|
||||
Clayton <kclayton@jps.net> is incharge of the PPC port and making sure
|
||||
things work there. Bruce Tenison <btenison@dibbs.net> is adding support
|
||||
for .fon files and also does testing. The program will mostly sure be
|
||||
re-written and Pete Ikusz along with the rest will re-design it. I would
|
||||
also like to thank Tri Nguyen <tmn_3022000@hotmail.com> who provided use
|
||||
with some important information regarding the communication with the Rio.
|
||||
|
||||
Additional Information and userspace tools
|
||||
|
||||
http://rio500.sourceforge.net/
|
||||
|
||||
|
||||
Requirements
|
||||
============
|
||||
|
||||
A host with a USB port running a Linux kernel with RIO 500 support enabled.
|
||||
|
||||
The driver is a module called rio500, which should be automatically loaded
|
||||
as you plug in your device. If that fails you can manually load it with
|
||||
|
||||
modprobe rio500
|
||||
|
||||
Udev should automatically create a device node as soon as plug in your device.
|
||||
If that fails, you can manually add a device for the USB rio500::
|
||||
|
||||
mknod /dev/usb/rio500 c 180 64
|
||||
|
||||
In that case, set appropriate permissions for /dev/usb/rio500 (don't forget
|
||||
about group and world permissions). Both read and write permissions are
|
||||
required for proper operation.
|
||||
|
||||
That's it. The Rio500 Utils at: http://rio500.sourceforge.net should
|
||||
be able to access the rio500.
|
||||
|
||||
Limits
|
||||
======
|
||||
|
||||
You can use only a single rio500 device at a time with your computer.
|
||||
|
||||
Bugs
|
||||
====
|
||||
|
||||
If you encounter any problems feel free to drop me an email.
|
||||
|
||||
Bruce Tenison
|
||||
btenison@dibbs.net
|
23
MAINTAINERS
23
MAINTAINERS
@ -2165,12 +2165,10 @@ F: arch/arm64/boot/dts/realtek/
|
||||
F: Documentation/devicetree/bindings/arm/realtek.yaml
|
||||
|
||||
ARM/RENESAS ARM64 ARCHITECTURE
|
||||
M: Simon Horman <horms@verge.net.au>
|
||||
M: Geert Uytterhoeven <geert+renesas@glider.be>
|
||||
M: Magnus Damm <magnus.damm@gmail.com>
|
||||
L: linux-renesas-soc@vger.kernel.org
|
||||
Q: http://patchwork.kernel.org/project/linux-renesas-soc/list/
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas.git next
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-devel.git next
|
||||
S: Supported
|
||||
F: arch/arm64/boot/dts/renesas/
|
||||
@ -2282,12 +2280,10 @@ S: Maintained
|
||||
F: drivers/media/platform/s5p-mfc/
|
||||
|
||||
ARM/SHMOBILE ARM ARCHITECTURE
|
||||
M: Simon Horman <horms@verge.net.au>
|
||||
M: Geert Uytterhoeven <geert+renesas@glider.be>
|
||||
M: Magnus Damm <magnus.damm@gmail.com>
|
||||
L: linux-renesas-soc@vger.kernel.org
|
||||
Q: http://patchwork.kernel.org/project/linux-renesas-soc/list/
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas.git next
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-devel.git next
|
||||
S: Supported
|
||||
F: arch/arm/boot/dts/emev2*
|
||||
@ -3100,7 +3096,7 @@ S: Supported
|
||||
F: arch/arm64/net/
|
||||
|
||||
BPF JIT for MIPS (32-BIT AND 64-BIT)
|
||||
M: Paul Burton <paul.burton@mips.com>
|
||||
M: Paul Burton <paulburton@kernel.org>
|
||||
L: netdev@vger.kernel.org
|
||||
L: bpf@vger.kernel.org
|
||||
S: Maintained
|
||||
@ -8005,7 +8001,7 @@ S: Maintained
|
||||
F: drivers/usb/atm/ueagle-atm.c
|
||||
|
||||
IMGTEC ASCII LCD DRIVER
|
||||
M: Paul Burton <paul.burton@mips.com>
|
||||
M: Paul Burton <paulburton@kernel.org>
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/auxdisplay/img-ascii-lcd.txt
|
||||
F: drivers/auxdisplay/img-ascii-lcd.c
|
||||
@ -9187,6 +9183,7 @@ M: Pavel Machek <pavel@ucw.cz>
|
||||
R: Dan Murphy <dmurphy@ti.com>
|
||||
L: linux-leds@vger.kernel.org
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/j.anaszewski/linux-leds.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/pavel/linux-leds.git
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/leds/
|
||||
F: drivers/leds/
|
||||
@ -10831,7 +10828,7 @@ F: drivers/usb/image/microtek.*
|
||||
|
||||
MIPS
|
||||
M: Ralf Baechle <ralf@linux-mips.org>
|
||||
M: Paul Burton <paul.burton@mips.com>
|
||||
M: Paul Burton <paulburton@kernel.org>
|
||||
M: James Hogan <jhogan@kernel.org>
|
||||
L: linux-mips@vger.kernel.org
|
||||
W: http://www.linux-mips.org/
|
||||
@ -10845,7 +10842,7 @@ F: arch/mips/
|
||||
F: drivers/platform/mips/
|
||||
|
||||
MIPS BOSTON DEVELOPMENT BOARD
|
||||
M: Paul Burton <paul.burton@mips.com>
|
||||
M: Paul Burton <paulburton@kernel.org>
|
||||
L: linux-mips@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/clock/img,boston-clock.txt
|
||||
@ -10855,7 +10852,7 @@ F: drivers/clk/imgtec/clk-boston.c
|
||||
F: include/dt-bindings/clock/boston-clock.h
|
||||
|
||||
MIPS GENERIC PLATFORM
|
||||
M: Paul Burton <paul.burton@mips.com>
|
||||
M: Paul Burton <paulburton@kernel.org>
|
||||
L: linux-mips@vger.kernel.org
|
||||
S: Supported
|
||||
F: Documentation/devicetree/bindings/power/mti,mips-cpc.txt
|
||||
@ -11547,6 +11544,7 @@ NSDEPS
|
||||
M: Matthias Maennich <maennich@google.com>
|
||||
S: Maintained
|
||||
F: scripts/nsdeps
|
||||
F: Documentation/core-api/symbol-namespaces.rst
|
||||
|
||||
NTB AMD DRIVER
|
||||
M: Shyam Sundar S K <Shyam-sundar.S-k@amd.com>
|
||||
@ -16766,13 +16764,6 @@ W: http://www.linux-usb.org/usbnet
|
||||
S: Maintained
|
||||
F: drivers/net/usb/dm9601.c
|
||||
|
||||
USB DIAMOND RIO500 DRIVER
|
||||
M: Cesar Miquel <miquel@df.uba.ar>
|
||||
L: rio500-users@lists.sourceforge.net
|
||||
W: http://rio500.sourceforge.net
|
||||
S: Maintained
|
||||
F: drivers/usb/misc/rio500*
|
||||
|
||||
USB EHCI DRIVER
|
||||
M: Alan Stern <stern@rowland.harvard.edu>
|
||||
L: linux-usb@vger.kernel.org
|
||||
|
9
Makefile
9
Makefile
@ -2,7 +2,7 @@
|
||||
VERSION = 5
|
||||
PATCHLEVEL = 4
|
||||
SUBLEVEL = 0
|
||||
EXTRAVERSION = -rc2
|
||||
EXTRAVERSION = -rc3
|
||||
NAME = Nesting Opossum
|
||||
|
||||
# *DOCUMENTATION*
|
||||
@ -599,7 +599,7 @@ endif
|
||||
# in addition to whatever we do anyway.
|
||||
# Just "make" or "make all" shall build modules as well
|
||||
|
||||
ifneq ($(filter all _all modules,$(MAKECMDGOALS)),)
|
||||
ifneq ($(filter all _all modules nsdeps,$(MAKECMDGOALS)),)
|
||||
KBUILD_MODULES := 1
|
||||
endif
|
||||
|
||||
@ -1217,9 +1217,8 @@ PHONY += kselftest
|
||||
kselftest:
|
||||
$(Q)$(MAKE) -C $(srctree)/tools/testing/selftests run_tests
|
||||
|
||||
PHONY += kselftest-clean
|
||||
kselftest-clean:
|
||||
$(Q)$(MAKE) -C $(srctree)/tools/testing/selftests clean
|
||||
kselftest-%: FORCE
|
||||
$(Q)$(MAKE) -C $(srctree)/tools/testing/selftests $*
|
||||
|
||||
PHONY += kselftest-merge
|
||||
kselftest-merge:
|
||||
|
@ -520,6 +520,7 @@
|
||||
interrupts = <39>;
|
||||
clocks = <&ccu CLK_AHB_EHCI0>;
|
||||
phys = <&usbphy 1>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -529,6 +530,7 @@
|
||||
interrupts = <64>;
|
||||
clocks = <&ccu CLK_USB_OHCI0>, <&ccu CLK_AHB_OHCI0>;
|
||||
phys = <&usbphy 1>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -608,6 +610,7 @@
|
||||
interrupts = <40>;
|
||||
clocks = <&ccu CLK_AHB_EHCI1>;
|
||||
phys = <&usbphy 2>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -617,6 +620,7 @@
|
||||
interrupts = <65>;
|
||||
clocks = <&ccu CLK_USB_OHCI1>, <&ccu CLK_AHB_OHCI1>;
|
||||
phys = <&usbphy 2>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -391,6 +391,7 @@
|
||||
interrupts = <39>;
|
||||
clocks = <&ccu CLK_AHB_EHCI>;
|
||||
phys = <&usbphy 1>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -400,6 +401,7 @@
|
||||
interrupts = <40>;
|
||||
clocks = <&ccu CLK_USB_OHCI>, <&ccu CLK_AHB_OHCI>;
|
||||
phys = <&usbphy 1>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -545,6 +545,7 @@
|
||||
clocks = <&ccu CLK_AHB1_EHCI0>;
|
||||
resets = <&ccu RST_AHB1_EHCI0>;
|
||||
phys = <&usbphy 1>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -555,6 +556,7 @@
|
||||
clocks = <&ccu CLK_AHB1_OHCI0>, <&ccu CLK_USB_OHCI0>;
|
||||
resets = <&ccu RST_AHB1_OHCI0>;
|
||||
phys = <&usbphy 1>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -565,6 +567,7 @@
|
||||
clocks = <&ccu CLK_AHB1_EHCI1>;
|
||||
resets = <&ccu RST_AHB1_EHCI1>;
|
||||
phys = <&usbphy 2>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -575,6 +578,7 @@
|
||||
clocks = <&ccu CLK_AHB1_OHCI1>, <&ccu CLK_USB_OHCI1>;
|
||||
resets = <&ccu RST_AHB1_OHCI1>;
|
||||
phys = <&usbphy 2>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -623,6 +623,7 @@
|
||||
interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ccu CLK_AHB_EHCI0>;
|
||||
phys = <&usbphy 1>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -632,6 +633,7 @@
|
||||
interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ccu CLK_USB_OHCI0>, <&ccu CLK_AHB_OHCI0>;
|
||||
phys = <&usbphy 1>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -714,6 +716,7 @@
|
||||
interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ccu CLK_AHB_EHCI1>;
|
||||
phys = <&usbphy 2>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -723,6 +726,7 @@
|
||||
interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&ccu CLK_USB_OHCI1>, <&ccu CLK_AHB_OHCI1>;
|
||||
phys = <&usbphy 2>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -307,6 +307,7 @@
|
||||
clocks = <&ccu CLK_BUS_EHCI>;
|
||||
resets = <&ccu RST_BUS_EHCI>;
|
||||
phys = <&usbphy 1>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -317,6 +318,7 @@
|
||||
clocks = <&ccu CLK_BUS_OHCI>, <&ccu CLK_USB_OHCI>;
|
||||
resets = <&ccu RST_BUS_OHCI>;
|
||||
phys = <&usbphy 1>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -632,6 +632,7 @@
|
||||
clocks = <&ccu CLK_BUS_EHCI0>;
|
||||
resets = <&ccu RST_BUS_EHCI0>;
|
||||
phys = <&usbphy 1>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -643,6 +644,7 @@
|
||||
clocks = <&ccu CLK_BUS_OHCI0>, <&ccu CLK_USB_OHCI0>;
|
||||
resets = <&ccu RST_BUS_OHCI0>;
|
||||
phys = <&usbphy 1>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -654,6 +656,7 @@
|
||||
clocks = <&ccu CLK_BUS_EHCI1>;
|
||||
resets = <&ccu RST_BUS_EHCI1>;
|
||||
phys = <&usbphy 2>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -273,6 +273,7 @@
|
||||
clocks = <&ccu CLK_BUS_EHCI1>;
|
||||
resets = <&ccu RST_BUS_EHCI1>;
|
||||
phys = <&usbphy 1>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -284,6 +285,7 @@
|
||||
<&ccu CLK_USB_OHCI1>;
|
||||
resets = <&ccu RST_BUS_OHCI1>;
|
||||
phys = <&usbphy 1>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -294,6 +296,7 @@
|
||||
clocks = <&ccu CLK_BUS_EHCI2>;
|
||||
resets = <&ccu RST_BUS_EHCI2>;
|
||||
phys = <&usbphy 2>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -305,6 +308,7 @@
|
||||
<&ccu CLK_USB_OHCI2>;
|
||||
resets = <&ccu RST_BUS_OHCI2>;
|
||||
phys = <&usbphy 2>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -346,6 +346,7 @@
|
||||
clocks = <&usb_clocks CLK_BUS_HCI0>;
|
||||
resets = <&usb_clocks RST_USB0_HCI>;
|
||||
phys = <&usbphy1>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -357,6 +358,7 @@
|
||||
<&usb_clocks CLK_USB_OHCI0>;
|
||||
resets = <&usb_clocks RST_USB0_HCI>;
|
||||
phys = <&usbphy1>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -378,6 +380,7 @@
|
||||
clocks = <&usb_clocks CLK_BUS_HCI1>;
|
||||
resets = <&usb_clocks RST_USB1_HCI>;
|
||||
phys = <&usbphy2>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -407,6 +410,7 @@
|
||||
clocks = <&usb_clocks CLK_BUS_HCI2>;
|
||||
resets = <&usb_clocks RST_USB2_HCI>;
|
||||
phys = <&usbphy3>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -418,6 +422,7 @@
|
||||
<&usb_clocks CLK_USB_OHCI2>;
|
||||
resets = <&usb_clocks RST_USB2_HCI>;
|
||||
phys = <&usbphy3>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -304,6 +304,7 @@
|
||||
clocks = <&ccu CLK_BUS_EHCI1>, <&ccu CLK_BUS_OHCI1>;
|
||||
resets = <&ccu RST_BUS_EHCI1>, <&ccu RST_BUS_OHCI1>;
|
||||
phys = <&usbphy 1>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -315,6 +316,7 @@
|
||||
<&ccu CLK_USB_OHCI1>;
|
||||
resets = <&ccu RST_BUS_EHCI1>, <&ccu RST_BUS_OHCI1>;
|
||||
phys = <&usbphy 1>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -325,6 +327,7 @@
|
||||
clocks = <&ccu CLK_BUS_EHCI2>, <&ccu CLK_BUS_OHCI2>;
|
||||
resets = <&ccu RST_BUS_EHCI2>, <&ccu RST_BUS_OHCI2>;
|
||||
phys = <&usbphy 2>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -336,6 +339,7 @@
|
||||
<&ccu CLK_USB_OHCI2>;
|
||||
resets = <&ccu RST_BUS_EHCI2>, <&ccu RST_BUS_OHCI2>;
|
||||
phys = <&usbphy 2>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -346,6 +350,7 @@
|
||||
clocks = <&ccu CLK_BUS_EHCI3>, <&ccu CLK_BUS_OHCI3>;
|
||||
resets = <&ccu RST_BUS_EHCI3>, <&ccu RST_BUS_OHCI3>;
|
||||
phys = <&usbphy 3>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -357,6 +362,7 @@
|
||||
<&ccu CLK_USB_OHCI3>;
|
||||
resets = <&ccu RST_BUS_EHCI3>, <&ccu RST_BUS_OHCI3>;
|
||||
phys = <&usbphy 3>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -91,7 +91,6 @@ CONFIG_USB_SERIAL_PL2303=m
|
||||
CONFIG_USB_SERIAL_CYBERJACK=m
|
||||
CONFIG_USB_SERIAL_XIRCOM=m
|
||||
CONFIG_USB_SERIAL_OMNINET=m
|
||||
CONFIG_USB_RIO500=m
|
||||
CONFIG_EXT2_FS=m
|
||||
CONFIG_EXT3_FS=m
|
||||
CONFIG_MSDOS_FS=y
|
||||
|
@ -195,7 +195,6 @@ CONFIG_USB_SERIAL_XIRCOM=m
|
||||
CONFIG_USB_SERIAL_OMNINET=m
|
||||
CONFIG_USB_EMI62=m
|
||||
CONFIG_USB_EMI26=m
|
||||
CONFIG_USB_RIO500=m
|
||||
CONFIG_USB_LEGOTOWER=m
|
||||
CONFIG_USB_LCD=m
|
||||
CONFIG_USB_CYTHERM=m
|
||||
|
@ -581,7 +581,6 @@ CONFIG_USB_SERIAL_XIRCOM=m
|
||||
CONFIG_USB_SERIAL_OMNINET=m
|
||||
CONFIG_USB_EMI62=m
|
||||
CONFIG_USB_EMI26=m
|
||||
CONFIG_USB_RIO500=m
|
||||
CONFIG_USB_LEGOTOWER=m
|
||||
CONFIG_USB_LCD=m
|
||||
CONFIG_USB_CYTHERM=m
|
||||
|
@ -327,7 +327,6 @@ CONFIG_USB_EMI62=m
|
||||
CONFIG_USB_EMI26=m
|
||||
CONFIG_USB_ADUTUX=m
|
||||
CONFIG_USB_SEVSEG=m
|
||||
CONFIG_USB_RIO500=m
|
||||
CONFIG_USB_LEGOTOWER=m
|
||||
CONFIG_USB_LCD=m
|
||||
CONFIG_USB_CYPRESS_CY7C63=m
|
||||
|
@ -189,7 +189,6 @@ CONFIG_USB_SERIAL_XIRCOM=m
|
||||
CONFIG_USB_SERIAL_OMNINET=m
|
||||
CONFIG_USB_EMI62=m
|
||||
CONFIG_USB_EMI26=m
|
||||
CONFIG_USB_RIO500=m
|
||||
CONFIG_USB_LEGOTOWER=m
|
||||
CONFIG_USB_LCD=m
|
||||
CONFIG_USB_CYTHERM=m
|
||||
|
@ -98,6 +98,7 @@ config CRYPTO_AES_ARM_CE
|
||||
tristate "Accelerated AES using ARMv8 Crypto Extensions"
|
||||
depends on KERNEL_MODE_NEON
|
||||
select CRYPTO_BLKCIPHER
|
||||
select CRYPTO_LIB_AES
|
||||
select CRYPTO_SIMD
|
||||
help
|
||||
Use an implementation of AES in CBC, CTR and XTS modes that uses
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include <asm/assembler.h>
|
||||
|
||||
.text
|
||||
.arch armv8-a
|
||||
.fpu crypto-neon-fp-armv8
|
||||
.align 3
|
||||
|
||||
|
@ -110,7 +110,6 @@ config ARM64
|
||||
select GENERIC_STRNLEN_USER
|
||||
select GENERIC_TIME_VSYSCALL
|
||||
select GENERIC_GETTIMEOFDAY
|
||||
select GENERIC_COMPAT_VDSO if (!CPU_BIG_ENDIAN && COMPAT)
|
||||
select HANDLE_DOMAIN_IRQ
|
||||
select HARDIRQS_SW_RESEND
|
||||
select HAVE_PCI
|
||||
@ -1159,7 +1158,7 @@ menuconfig COMPAT
|
||||
if COMPAT
|
||||
|
||||
config KUSER_HELPERS
|
||||
bool "Enable kuser helpers page for 32 bit applications"
|
||||
bool "Enable kuser helpers page for 32-bit applications"
|
||||
default y
|
||||
help
|
||||
Warning: disabling this option may break 32-bit user programs.
|
||||
@ -1185,6 +1184,18 @@ config KUSER_HELPERS
|
||||
Say N here only if you are absolutely certain that you do not
|
||||
need these helpers; otherwise, the safe option is to say Y.
|
||||
|
||||
config COMPAT_VDSO
|
||||
bool "Enable vDSO for 32-bit applications"
|
||||
depends on !CPU_BIG_ENDIAN && "$(CROSS_COMPILE_COMPAT)" != ""
|
||||
select GENERIC_COMPAT_VDSO
|
||||
default y
|
||||
help
|
||||
Place in the process address space of 32-bit applications an
|
||||
ELF shared object providing fast implementations of gettimeofday
|
||||
and clock_gettime.
|
||||
|
||||
You must have a 32-bit build of glibc 2.22 or later for programs
|
||||
to seamlessly take advantage of this.
|
||||
|
||||
menuconfig ARMV8_DEPRECATED
|
||||
bool "Emulate deprecated/obsolete ARMv8 instructions"
|
||||
|
@ -53,22 +53,6 @@ $(warning Detected assembler with broken .inst; disassembly will be unreliable)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_GENERIC_COMPAT_VDSO), y)
|
||||
CROSS_COMPILE_COMPAT ?= $(CONFIG_CROSS_COMPILE_COMPAT_VDSO:"%"=%)
|
||||
|
||||
ifeq ($(CONFIG_CC_IS_CLANG), y)
|
||||
$(warning CROSS_COMPILE_COMPAT is clang, the compat vDSO will not be built)
|
||||
else ifeq ($(strip $(CROSS_COMPILE_COMPAT)),)
|
||||
$(warning CROSS_COMPILE_COMPAT not defined or empty, the compat vDSO will not be built)
|
||||
else ifeq ($(shell which $(CROSS_COMPILE_COMPAT)gcc 2> /dev/null),)
|
||||
$(error $(CROSS_COMPILE_COMPAT)gcc not found, check CROSS_COMPILE_COMPAT)
|
||||
else
|
||||
export CROSS_COMPILE_COMPAT
|
||||
export CONFIG_COMPAT_VDSO := y
|
||||
compat_vdso := -DCONFIG_COMPAT_VDSO=1
|
||||
endif
|
||||
endif
|
||||
|
||||
KBUILD_CFLAGS += -mgeneral-regs-only $(lseinstr) $(brokengasinst) \
|
||||
$(compat_vdso) $(cc_has_k_constraint)
|
||||
KBUILD_CFLAGS += -fno-asynchronous-unwind-tables
|
||||
|
@ -104,6 +104,7 @@
|
||||
|
||||
&ehci0 {
|
||||
phys = <&usbphy 0>;
|
||||
phy-names = "usb";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
@ -150,6 +151,7 @@
|
||||
|
||||
&ohci0 {
|
||||
phys = <&usbphy 0>;
|
||||
phy-names = "usb";
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
|
@ -553,6 +553,7 @@
|
||||
resets = <&ccu RST_BUS_OHCI1>,
|
||||
<&ccu RST_BUS_EHCI1>;
|
||||
phys = <&usbphy 1>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -564,6 +565,7 @@
|
||||
<&ccu CLK_USB_OHCI1>;
|
||||
resets = <&ccu RST_BUS_OHCI1>;
|
||||
phys = <&usbphy 1>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -547,6 +547,7 @@
|
||||
resets = <&ccu RST_BUS_OHCI3>,
|
||||
<&ccu RST_BUS_EHCI3>;
|
||||
phys = <&usb2phy 3>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@ -558,6 +559,7 @@
|
||||
<&ccu CLK_USB_OHCI3>;
|
||||
resets = <&ccu RST_BUS_OHCI3>;
|
||||
phys = <&usb2phy 3>;
|
||||
phy-names = "usb";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -321,7 +321,8 @@ static inline s64 __lse_atomic64_dec_if_positive(atomic64_t *v)
|
||||
}
|
||||
|
||||
#define __CMPXCHG_CASE(w, sfx, name, sz, mb, cl...) \
|
||||
static inline u##sz __lse__cmpxchg_case_##name##sz(volatile void *ptr, \
|
||||
static __always_inline u##sz \
|
||||
__lse__cmpxchg_case_##name##sz(volatile void *ptr, \
|
||||
u##sz old, \
|
||||
u##sz new) \
|
||||
{ \
|
||||
@ -362,7 +363,8 @@ __CMPXCHG_CASE(x, , mb_, 64, al, "memory")
|
||||
#undef __CMPXCHG_CASE
|
||||
|
||||
#define __CMPXCHG_DBL(name, mb, cl...) \
|
||||
static inline long __lse__cmpxchg_double##name(unsigned long old1, \
|
||||
static __always_inline long \
|
||||
__lse__cmpxchg_double##name(unsigned long old1, \
|
||||
unsigned long old2, \
|
||||
unsigned long new1, \
|
||||
unsigned long new2, \
|
||||
|
@ -20,7 +20,7 @@
|
||||
|
||||
#define dmb(option) __asm__ __volatile__ ("dmb " #option : : : "memory")
|
||||
|
||||
#if __LINUX_ARM_ARCH__ >= 8
|
||||
#if __LINUX_ARM_ARCH__ >= 8 && defined(CONFIG_AS_DMB_ISHLD)
|
||||
#define aarch32_smp_mb() dmb(ish)
|
||||
#define aarch32_smp_rmb() dmb(ishld)
|
||||
#define aarch32_smp_wmb() dmb(ishst)
|
||||
|
@ -1,33 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Copyright (C) 2012 ARM Limited
|
||||
*/
|
||||
#ifndef __ASM_VDSO_DATAPAGE_H
|
||||
#define __ASM_VDSO_DATAPAGE_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
struct vdso_data {
|
||||
__u64 cs_cycle_last; /* Timebase at clocksource init */
|
||||
__u64 raw_time_sec; /* Raw time */
|
||||
__u64 raw_time_nsec;
|
||||
__u64 xtime_clock_sec; /* Kernel time */
|
||||
__u64 xtime_clock_nsec;
|
||||
__u64 xtime_coarse_sec; /* Coarse time */
|
||||
__u64 xtime_coarse_nsec;
|
||||
__u64 wtm_clock_sec; /* Wall to monotonic time */
|
||||
__u64 wtm_clock_nsec;
|
||||
__u32 tb_seq_count; /* Timebase sequence counter */
|
||||
/* cs_* members must be adjacent and in this order (ldp accesses) */
|
||||
__u32 cs_mono_mult; /* NTP-adjusted clocksource multiplier */
|
||||
__u32 cs_shift; /* Clocksource shift (mono = raw) */
|
||||
__u32 cs_raw_mult; /* Raw clocksource multiplier */
|
||||
__u32 tz_minuteswest; /* Whacky timezone stuff */
|
||||
__u32 tz_dsttime;
|
||||
__u32 use_syscall;
|
||||
__u32 hrtimer_res;
|
||||
};
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
#endif /* __ASM_VDSO_DATAPAGE_H */
|
@ -174,6 +174,9 @@ static void __init register_insn_emulation(struct insn_emulation_ops *ops)
|
||||
struct insn_emulation *insn;
|
||||
|
||||
insn = kzalloc(sizeof(*insn), GFP_KERNEL);
|
||||
if (!insn)
|
||||
return;
|
||||
|
||||
insn->ops = ops;
|
||||
insn->min = INSN_UNDEF;
|
||||
|
||||
@ -233,6 +236,8 @@ static void __init register_insn_emulation_sysctl(void)
|
||||
|
||||
insns_sysctl = kcalloc(nr_insn_emulated + 1, sizeof(*sysctl),
|
||||
GFP_KERNEL);
|
||||
if (!insns_sysctl)
|
||||
return;
|
||||
|
||||
raw_spin_lock_irqsave(&insn_emulation_lock, flags);
|
||||
list_for_each_entry(insn, &insn_emulation, node) {
|
||||
|
@ -128,8 +128,8 @@ static void install_bp_hardening_cb(bp_hardening_cb_t fn,
|
||||
int cpu, slot = -1;
|
||||
|
||||
/*
|
||||
* enable_smccc_arch_workaround_1() passes NULL for the hyp_vecs
|
||||
* start/end if we're a guest. Skip the hyp-vectors work.
|
||||
* detect_harden_bp_fw() passes NULL for the hyp_vecs start/end if
|
||||
* we're a guest. Skip the hyp-vectors work.
|
||||
*/
|
||||
if (!hyp_vecs_start) {
|
||||
__this_cpu_write(bp_hardening_data.fn, fn);
|
||||
|
@ -136,6 +136,7 @@ static const struct arm64_ftr_bits ftr_id_aa64isar0[] = {
|
||||
|
||||
static const struct arm64_ftr_bits ftr_id_aa64isar1[] = {
|
||||
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_SB_SHIFT, 4, 0),
|
||||
ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_FRINTTS_SHIFT, 4, 0),
|
||||
ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_PTR_AUTH),
|
||||
FTR_STRICT, FTR_LOWER_SAFE, ID_AA64ISAR1_GPI_SHIFT, 4, 0),
|
||||
ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_PTR_AUTH),
|
||||
|
@ -775,6 +775,7 @@ el0_sync_compat:
|
||||
b.ge el0_dbg
|
||||
b el0_inv
|
||||
el0_svc_compat:
|
||||
gic_prio_kentry_setup tmp=x1
|
||||
mov x0, sp
|
||||
bl el0_svc_compat_handler
|
||||
b ret_to_user
|
||||
|
@ -121,10 +121,16 @@ int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr)
|
||||
|
||||
/*
|
||||
* Ensure updated trampoline is visible to instruction
|
||||
* fetch before we patch in the branch.
|
||||
* fetch before we patch in the branch. Although the
|
||||
* architecture doesn't require an IPI in this case,
|
||||
* Neoverse-N1 erratum #1542419 does require one
|
||||
* if the TLB maintenance in module_enable_ro() is
|
||||
* skipped due to rodata_enabled. It doesn't seem worth
|
||||
* it to make it conditional given that this is
|
||||
* certainly not a fast-path.
|
||||
*/
|
||||
__flush_icache_range((unsigned long)&dst[0],
|
||||
(unsigned long)&dst[1]);
|
||||
flush_icache_range((unsigned long)&dst[0],
|
||||
(unsigned long)&dst[1]);
|
||||
}
|
||||
addr = (unsigned long)dst;
|
||||
#else /* CONFIG_ARM64_MODULE_PLTS */
|
||||
|
@ -332,22 +332,27 @@ void arch_release_task_struct(struct task_struct *tsk)
|
||||
fpsimd_release_task(tsk);
|
||||
}
|
||||
|
||||
/*
|
||||
* src and dst may temporarily have aliased sve_state after task_struct
|
||||
* is copied. We cannot fix this properly here, because src may have
|
||||
* live SVE state and dst's thread_info may not exist yet, so tweaking
|
||||
* either src's or dst's TIF_SVE is not safe.
|
||||
*
|
||||
* The unaliasing is done in copy_thread() instead. This works because
|
||||
* dst is not schedulable or traceable until both of these functions
|
||||
* have been called.
|
||||
*/
|
||||
int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
|
||||
{
|
||||
if (current->mm)
|
||||
fpsimd_preserve_current_state();
|
||||
*dst = *src;
|
||||
|
||||
/* We rely on the above assignment to initialize dst's thread_flags: */
|
||||
BUILD_BUG_ON(!IS_ENABLED(CONFIG_THREAD_INFO_IN_TASK));
|
||||
|
||||
/*
|
||||
* Detach src's sve_state (if any) from dst so that it does not
|
||||
* get erroneously used or freed prematurely. dst's sve_state
|
||||
* will be allocated on demand later on if dst uses SVE.
|
||||
* For consistency, also clear TIF_SVE here: this could be done
|
||||
* later in copy_process(), but to avoid tripping up future
|
||||
* maintainers it is best not to leave TIF_SVE and sve_state in
|
||||
* an inconsistent state, even temporarily.
|
||||
*/
|
||||
dst->thread.sve_state = NULL;
|
||||
clear_tsk_thread_flag(dst, TIF_SVE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -360,13 +365,6 @@ int copy_thread(unsigned long clone_flags, unsigned long stack_start,
|
||||
|
||||
memset(&p->thread.cpu_context, 0, sizeof(struct cpu_context));
|
||||
|
||||
/*
|
||||
* Unalias p->thread.sve_state (if any) from the parent task
|
||||
* and disable discard SVE state for p:
|
||||
*/
|
||||
clear_tsk_thread_flag(p, TIF_SVE);
|
||||
p->thread.sve_state = NULL;
|
||||
|
||||
/*
|
||||
* In case p was allocated the same task_struct pointer as some
|
||||
* other recently-exited task, make sure p is disassociated from
|
||||
|
@ -8,15 +8,21 @@
|
||||
ARCH_REL_TYPE_ABS := R_ARM_JUMP_SLOT|R_ARM_GLOB_DAT|R_ARM_ABS32
|
||||
include $(srctree)/lib/vdso/Makefile
|
||||
|
||||
COMPATCC := $(CROSS_COMPILE_COMPAT)gcc
|
||||
# Same as cc-*option, but using CC_COMPAT instead of CC
|
||||
ifeq ($(CONFIG_CC_IS_CLANG), y)
|
||||
CC_COMPAT ?= $(CC)
|
||||
else
|
||||
CC_COMPAT ?= $(CROSS_COMPILE_COMPAT)gcc
|
||||
endif
|
||||
|
||||
# Same as cc-*option, but using COMPATCC instead of CC
|
||||
cc32-option = $(call try-run,\
|
||||
$(COMPATCC) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2))
|
||||
$(CC_COMPAT) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2))
|
||||
cc32-disable-warning = $(call try-run,\
|
||||
$(COMPATCC) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1)))
|
||||
$(CC_COMPAT) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1)))
|
||||
cc32-ldoption = $(call try-run,\
|
||||
$(COMPATCC) $(1) -nostdlib -x c /dev/null -o "$$TMP",$(1),$(2))
|
||||
$(CC_COMPAT) $(1) -nostdlib -x c /dev/null -o "$$TMP",$(1),$(2))
|
||||
cc32-as-instr = $(call try-run,\
|
||||
printf "%b\n" "$(1)" | $(CC_COMPAT) $(VDSO_AFLAGS) -c -x assembler -o "$$TMP" -,$(2),$(3))
|
||||
|
||||
# We cannot use the global flags to compile the vDSO files, the main reason
|
||||
# being that the 32-bit compiler may be older than the main (64-bit) compiler
|
||||
@ -25,22 +31,21 @@ cc32-ldoption = $(call try-run,\
|
||||
# arm64 one.
|
||||
# As a result we set our own flags here.
|
||||
|
||||
# From top-level Makefile
|
||||
# NOSTDINC_FLAGS
|
||||
VDSO_CPPFLAGS := -nostdinc -isystem $(shell $(COMPATCC) -print-file-name=include)
|
||||
# KBUILD_CPPFLAGS and NOSTDINC_FLAGS from top-level Makefile
|
||||
VDSO_CPPFLAGS := -D__KERNEL__ -nostdinc -isystem $(shell $(CC_COMPAT) -print-file-name=include)
|
||||
VDSO_CPPFLAGS += $(LINUXINCLUDE)
|
||||
VDSO_CPPFLAGS += $(KBUILD_CPPFLAGS)
|
||||
|
||||
# Common C and assembly flags
|
||||
# From top-level Makefile
|
||||
VDSO_CAFLAGS := $(VDSO_CPPFLAGS)
|
||||
ifneq ($(shell $(CC_COMPAT) --version 2>&1 | head -n 1 | grep clang),)
|
||||
VDSO_CAFLAGS += --target=$(notdir $(CROSS_COMPILE_COMPAT:%-=%))
|
||||
endif
|
||||
|
||||
VDSO_CAFLAGS += $(call cc32-option,-fno-PIE)
|
||||
ifdef CONFIG_DEBUG_INFO
|
||||
VDSO_CAFLAGS += -g
|
||||
endif
|
||||
ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(COMPATCC)), y)
|
||||
VDSO_CAFLAGS += -DCC_HAVE_ASM_GOTO
|
||||
endif
|
||||
|
||||
# From arm Makefile
|
||||
VDSO_CAFLAGS += $(call cc32-option,-fno-dwarf2-cfi-asm)
|
||||
@ -55,6 +60,7 @@ endif
|
||||
VDSO_CAFLAGS += -fPIC -fno-builtin -fno-stack-protector
|
||||
VDSO_CAFLAGS += -DDISABLE_BRANCH_PROFILING
|
||||
|
||||
|
||||
# Try to compile for ARMv8. If the compiler is too old and doesn't support it,
|
||||
# fall back to v7. There is no easy way to check for what architecture the code
|
||||
# is being compiled, so define a macro specifying that (see arch/arm/Makefile).
|
||||
@ -91,6 +97,12 @@ VDSO_CFLAGS += -Wno-int-to-pointer-cast
|
||||
VDSO_AFLAGS := $(VDSO_CAFLAGS)
|
||||
VDSO_AFLAGS += -D__ASSEMBLY__
|
||||
|
||||
# Check for binutils support for dmb ishld
|
||||
dmbinstr := $(call cc32-as-instr,dmb ishld,-DCONFIG_AS_DMB_ISHLD=1)
|
||||
|
||||
VDSO_CFLAGS += $(dmbinstr)
|
||||
VDSO_AFLAGS += $(dmbinstr)
|
||||
|
||||
VDSO_LDFLAGS := $(VDSO_CPPFLAGS)
|
||||
# From arm vDSO Makefile
|
||||
VDSO_LDFLAGS += -Wl,-Bsymbolic -Wl,--no-undefined -Wl,-soname=linux-vdso.so.1
|
||||
@ -159,14 +171,14 @@ quiet_cmd_vdsold_and_vdso_check = LD32 $@
|
||||
cmd_vdsold_and_vdso_check = $(cmd_vdsold); $(cmd_vdso_check)
|
||||
|
||||
quiet_cmd_vdsold = LD32 $@
|
||||
cmd_vdsold = $(COMPATCC) -Wp,-MD,$(depfile) $(VDSO_LDFLAGS) \
|
||||
cmd_vdsold = $(CC_COMPAT) -Wp,-MD,$(depfile) $(VDSO_LDFLAGS) \
|
||||
-Wl,-T $(filter %.lds,$^) $(filter %.o,$^) -o $@
|
||||
quiet_cmd_vdsocc = CC32 $@
|
||||
cmd_vdsocc = $(COMPATCC) -Wp,-MD,$(depfile) $(VDSO_CFLAGS) -c -o $@ $<
|
||||
cmd_vdsocc = $(CC_COMPAT) -Wp,-MD,$(depfile) $(VDSO_CFLAGS) -c -o $@ $<
|
||||
quiet_cmd_vdsocc_gettimeofday = CC32 $@
|
||||
cmd_vdsocc_gettimeofday = $(COMPATCC) -Wp,-MD,$(depfile) $(VDSO_CFLAGS) $(VDSO_CFLAGS_gettimeofday_o) -c -o $@ $<
|
||||
cmd_vdsocc_gettimeofday = $(CC_COMPAT) -Wp,-MD,$(depfile) $(VDSO_CFLAGS) $(VDSO_CFLAGS_gettimeofday_o) -c -o $@ $<
|
||||
quiet_cmd_vdsoas = AS32 $@
|
||||
cmd_vdsoas = $(COMPATCC) -Wp,-MD,$(depfile) $(VDSO_AFLAGS) -c -o $@ $<
|
||||
cmd_vdsoas = $(CC_COMPAT) -Wp,-MD,$(depfile) $(VDSO_AFLAGS) -c -o $@ $<
|
||||
|
||||
quiet_cmd_vdsomunge = MUNGE $@
|
||||
cmd_vdsomunge = $(obj)/$(munge) $< $@
|
||||
|
@ -113,6 +113,15 @@ static inline bool is_ttbr1_addr(unsigned long addr)
|
||||
return arch_kasan_reset_tag(addr) >= PAGE_OFFSET;
|
||||
}
|
||||
|
||||
static inline unsigned long mm_to_pgd_phys(struct mm_struct *mm)
|
||||
{
|
||||
/* Either init_pg_dir or swapper_pg_dir */
|
||||
if (mm == &init_mm)
|
||||
return __pa_symbol(mm->pgd);
|
||||
|
||||
return (unsigned long)virt_to_phys(mm->pgd);
|
||||
}
|
||||
|
||||
/*
|
||||
* Dump out the page tables associated with 'addr' in the currently active mm.
|
||||
*/
|
||||
@ -141,7 +150,7 @@ static void show_pte(unsigned long addr)
|
||||
|
||||
pr_alert("%s pgtable: %luk pages, %llu-bit VAs, pgdp=%016lx\n",
|
||||
mm == &init_mm ? "swapper" : "user", PAGE_SIZE / SZ_1K,
|
||||
vabits_actual, (unsigned long)virt_to_phys(mm->pgd));
|
||||
vabits_actual, mm_to_pgd_phys(mm));
|
||||
pgdp = pgd_offset(mm, addr);
|
||||
pgd = READ_ONCE(*pgdp);
|
||||
pr_alert("[%016lx] pgd=%016llx", addr, pgd_val(pgd));
|
||||
@ -266,7 +275,7 @@ static bool __kprobes is_spurious_el1_translation_fault(unsigned long addr,
|
||||
* If we got a different type of fault from the AT instruction,
|
||||
* treat the translation fault as spurious.
|
||||
*/
|
||||
dfsc = FIELD_PREP(SYS_PAR_EL1_FST, par);
|
||||
dfsc = FIELD_GET(SYS_PAR_EL1_FST, par);
|
||||
return (dfsc & ESR_ELx_FSC_TYPE) != ESR_ELx_FSC_FAULT;
|
||||
}
|
||||
|
||||
|
@ -84,7 +84,7 @@ void __init prom_init(void)
|
||||
* Here we will start up CPU1 in the background and ask it to
|
||||
* reconfigure itself then go back to sleep.
|
||||
*/
|
||||
memcpy((void *)0xa0000200, &bmips_smp_movevec, 0x20);
|
||||
memcpy((void *)0xa0000200, bmips_smp_movevec, 0x20);
|
||||
__sync();
|
||||
set_c0_cause(C_SW0);
|
||||
cpumask_set_cpu(1, &bmips_booted_mask);
|
||||
|
@ -571,7 +571,6 @@ CONFIG_USB_SERIAL_OMNINET=m
|
||||
CONFIG_USB_EMI62=m
|
||||
CONFIG_USB_EMI26=m
|
||||
CONFIG_USB_ADUTUX=m
|
||||
CONFIG_USB_RIO500=m
|
||||
CONFIG_USB_LEGOTOWER=m
|
||||
CONFIG_USB_LCD=m
|
||||
CONFIG_USB_CYPRESS_CY7C63=m
|
||||
|
@ -314,7 +314,6 @@ CONFIG_USB_SERIAL_SAFE_PADDED=y
|
||||
CONFIG_USB_SERIAL_CYBERJACK=m
|
||||
CONFIG_USB_SERIAL_XIRCOM=m
|
||||
CONFIG_USB_SERIAL_OMNINET=m
|
||||
CONFIG_USB_RIO500=m
|
||||
CONFIG_USB_LEGOTOWER=m
|
||||
CONFIG_USB_LCD=m
|
||||
CONFIG_USB_CYTHERM=m
|
||||
|
@ -43,7 +43,7 @@
|
||||
|
||||
/* O32 stack has to be 8-byte aligned. */
|
||||
static u64 o32_stk[4096];
|
||||
#define O32_STK &o32_stk[sizeof(o32_stk)]
|
||||
#define O32_STK (&o32_stk[ARRAY_SIZE(o32_stk)])
|
||||
|
||||
#define __PROM_O32(fun, arg) fun arg __asm__(#fun); \
|
||||
__asm__(#fun " = call_o32")
|
||||
|
@ -75,11 +75,11 @@ static inline int register_bmips_smp_ops(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
extern char bmips_reset_nmi_vec;
|
||||
extern char bmips_reset_nmi_vec_end;
|
||||
extern char bmips_smp_movevec;
|
||||
extern char bmips_smp_int_vec;
|
||||
extern char bmips_smp_int_vec_end;
|
||||
extern char bmips_reset_nmi_vec[];
|
||||
extern char bmips_reset_nmi_vec_end[];
|
||||
extern char bmips_smp_movevec[];
|
||||
extern char bmips_smp_int_vec[];
|
||||
extern char bmips_smp_int_vec_end[];
|
||||
|
||||
extern int bmips_smp_enabled;
|
||||
extern int bmips_cpu_offset;
|
||||
|
@ -68,8 +68,8 @@ extern unsigned long __xchg_called_with_bad_pointer(void)
|
||||
extern unsigned long __xchg_small(volatile void *ptr, unsigned long val,
|
||||
unsigned int size);
|
||||
|
||||
static inline unsigned long __xchg(volatile void *ptr, unsigned long x,
|
||||
int size)
|
||||
static __always_inline
|
||||
unsigned long __xchg(volatile void *ptr, unsigned long x, int size)
|
||||
{
|
||||
switch (size) {
|
||||
case 1:
|
||||
@ -149,8 +149,9 @@ static inline unsigned long __xchg(volatile void *ptr, unsigned long x,
|
||||
extern unsigned long __cmpxchg_small(volatile void *ptr, unsigned long old,
|
||||
unsigned long new, unsigned int size);
|
||||
|
||||
static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
|
||||
unsigned long new, unsigned int size)
|
||||
static __always_inline
|
||||
unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
|
||||
unsigned long new, unsigned int size)
|
||||
{
|
||||
switch (size) {
|
||||
case 1:
|
||||
|
@ -24,6 +24,8 @@
|
||||
|
||||
#define VDSO_HAS_CLOCK_GETRES 1
|
||||
|
||||
#define __VDSO_USE_SYSCALL ULLONG_MAX
|
||||
|
||||
#ifdef CONFIG_MIPS_CLOCK_VSYSCALL
|
||||
|
||||
static __always_inline long gettimeofday_fallback(
|
||||
@ -205,7 +207,7 @@ static __always_inline u64 __arch_get_hw_counter(s32 clock_mode)
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
cycle_now = 0;
|
||||
cycle_now = __VDSO_USE_SYSCALL;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -6,5 +6,16 @@
|
||||
#define HWCAP_MIPS_R6 (1 << 0)
|
||||
#define HWCAP_MIPS_MSA (1 << 1)
|
||||
#define HWCAP_MIPS_CRC32 (1 << 2)
|
||||
#define HWCAP_MIPS_MIPS16 (1 << 3)
|
||||
#define HWCAP_MIPS_MDMX (1 << 4)
|
||||
#define HWCAP_MIPS_MIPS3D (1 << 5)
|
||||
#define HWCAP_MIPS_SMARTMIPS (1 << 6)
|
||||
#define HWCAP_MIPS_DSP (1 << 7)
|
||||
#define HWCAP_MIPS_DSP2 (1 << 8)
|
||||
#define HWCAP_MIPS_DSP3 (1 << 9)
|
||||
#define HWCAP_MIPS_MIPS16E2 (1 << 10)
|
||||
#define HWCAP_LOONGSON_MMI (1 << 11)
|
||||
#define HWCAP_LOONGSON_EXT (1 << 12)
|
||||
#define HWCAP_LOONGSON_EXT2 (1 << 13)
|
||||
|
||||
#endif /* _UAPI_ASM_HWCAP_H */
|
||||
|
@ -2192,6 +2192,39 @@ void cpu_probe(void)
|
||||
elf_hwcap |= HWCAP_MIPS_MSA;
|
||||
}
|
||||
|
||||
if (cpu_has_mips16)
|
||||
elf_hwcap |= HWCAP_MIPS_MIPS16;
|
||||
|
||||
if (cpu_has_mdmx)
|
||||
elf_hwcap |= HWCAP_MIPS_MDMX;
|
||||
|
||||
if (cpu_has_mips3d)
|
||||
elf_hwcap |= HWCAP_MIPS_MIPS3D;
|
||||
|
||||
if (cpu_has_smartmips)
|
||||
elf_hwcap |= HWCAP_MIPS_SMARTMIPS;
|
||||
|
||||
if (cpu_has_dsp)
|
||||
elf_hwcap |= HWCAP_MIPS_DSP;
|
||||
|
||||
if (cpu_has_dsp2)
|
||||
elf_hwcap |= HWCAP_MIPS_DSP2;
|
||||
|
||||
if (cpu_has_dsp3)
|
||||
elf_hwcap |= HWCAP_MIPS_DSP3;
|
||||
|
||||
if (cpu_has_mips16e2)
|
||||
elf_hwcap |= HWCAP_MIPS_MIPS16E2;
|
||||
|
||||
if (cpu_has_loongson_mmi)
|
||||
elf_hwcap |= HWCAP_LOONGSON_MMI;
|
||||
|
||||
if (cpu_has_loongson_ext)
|
||||
elf_hwcap |= HWCAP_LOONGSON_EXT;
|
||||
|
||||
if (cpu_has_loongson_ext2)
|
||||
elf_hwcap |= HWCAP_LOONGSON_EXT2;
|
||||
|
||||
if (cpu_has_vz)
|
||||
cpu_probe_vz(c);
|
||||
|
||||
|
@ -464,10 +464,10 @@ static void bmips_wr_vec(unsigned long dst, char *start, char *end)
|
||||
|
||||
static inline void bmips_nmi_handler_setup(void)
|
||||
{
|
||||
bmips_wr_vec(BMIPS_NMI_RESET_VEC, &bmips_reset_nmi_vec,
|
||||
&bmips_reset_nmi_vec_end);
|
||||
bmips_wr_vec(BMIPS_WARM_RESTART_VEC, &bmips_smp_int_vec,
|
||||
&bmips_smp_int_vec_end);
|
||||
bmips_wr_vec(BMIPS_NMI_RESET_VEC, bmips_reset_nmi_vec,
|
||||
bmips_reset_nmi_vec_end);
|
||||
bmips_wr_vec(BMIPS_WARM_RESTART_VEC, bmips_smp_int_vec,
|
||||
bmips_smp_int_vec_end);
|
||||
}
|
||||
|
||||
struct reset_vec_info {
|
||||
|
@ -47,6 +47,10 @@ else
|
||||
$(call cc-option,-march=mips64r2,-mips64r2 -U_MIPS_ISA -D_MIPS_ISA=_MIPS_ISA_MIPS64)
|
||||
endif
|
||||
|
||||
# Some -march= flags enable MMI instructions, and GCC complains about that
|
||||
# support being enabled alongside -msoft-float. Thus explicitly disable MMI.
|
||||
cflags-y += $(call cc-option,-mno-loongson-mmi)
|
||||
|
||||
#
|
||||
# Loongson Machines' Support
|
||||
#
|
||||
|
@ -653,6 +653,13 @@ static void build_restore_pagemask(u32 **p, struct uasm_reloc **r,
|
||||
int restore_scratch)
|
||||
{
|
||||
if (restore_scratch) {
|
||||
/*
|
||||
* Ensure the MFC0 below observes the value written to the
|
||||
* KScratch register by the prior MTC0.
|
||||
*/
|
||||
if (scratch_reg >= 0)
|
||||
uasm_i_ehb(p);
|
||||
|
||||
/* Reset default page size */
|
||||
if (PM_DEFAULT_MASK >> 16) {
|
||||
uasm_i_lui(p, tmp, PM_DEFAULT_MASK >> 16);
|
||||
@ -667,12 +674,10 @@ static void build_restore_pagemask(u32 **p, struct uasm_reloc **r,
|
||||
uasm_i_mtc0(p, 0, C0_PAGEMASK);
|
||||
uasm_il_b(p, r, lid);
|
||||
}
|
||||
if (scratch_reg >= 0) {
|
||||
uasm_i_ehb(p);
|
||||
if (scratch_reg >= 0)
|
||||
UASM_i_MFC0(p, 1, c0_kscratch(), scratch_reg);
|
||||
} else {
|
||||
else
|
||||
UASM_i_LW(p, 1, scratchpad_offset(0), 0);
|
||||
}
|
||||
} else {
|
||||
/* Reset default page size */
|
||||
if (PM_DEFAULT_MASK >> 16) {
|
||||
@ -921,6 +926,10 @@ build_get_pgd_vmalloc64(u32 **p, struct uasm_label **l, struct uasm_reloc **r,
|
||||
}
|
||||
if (mode != not_refill && check_for_high_segbits) {
|
||||
uasm_l_large_segbits_fault(l, *p);
|
||||
|
||||
if (mode == refill_scratch && scratch_reg >= 0)
|
||||
uasm_i_ehb(p);
|
||||
|
||||
/*
|
||||
* We get here if we are an xsseg address, or if we are
|
||||
* an xuseg address above (PGDIR_SHIFT+PGDIR_BITS) boundary.
|
||||
@ -939,12 +948,10 @@ build_get_pgd_vmalloc64(u32 **p, struct uasm_label **l, struct uasm_reloc **r,
|
||||
uasm_i_jr(p, ptr);
|
||||
|
||||
if (mode == refill_scratch) {
|
||||
if (scratch_reg >= 0) {
|
||||
uasm_i_ehb(p);
|
||||
if (scratch_reg >= 0)
|
||||
UASM_i_MFC0(p, 1, c0_kscratch(), scratch_reg);
|
||||
} else {
|
||||
else
|
||||
UASM_i_LW(p, 1, scratchpad_offset(0), 0);
|
||||
}
|
||||
} else {
|
||||
uasm_i_nop(p);
|
||||
}
|
||||
|
@ -15,6 +15,7 @@ ccflags-vdso := \
|
||||
$(filter -mmicromips,$(KBUILD_CFLAGS)) \
|
||||
$(filter -march=%,$(KBUILD_CFLAGS)) \
|
||||
$(filter -m%-float,$(KBUILD_CFLAGS)) \
|
||||
$(filter -mno-loongson-%,$(KBUILD_CFLAGS)) \
|
||||
-D__VDSO__
|
||||
|
||||
ifdef CONFIG_CC_IS_CLANG
|
||||
|
@ -35,6 +35,10 @@ static inline void radix__flush_all_lpid(unsigned int lpid)
|
||||
{
|
||||
WARN_ON(1);
|
||||
}
|
||||
static inline void radix__flush_all_lpid_guest(unsigned int lpid)
|
||||
{
|
||||
WARN_ON(1);
|
||||
}
|
||||
#endif
|
||||
|
||||
extern void radix__flush_hugetlb_tlb_range(struct vm_area_struct *vma,
|
||||
|
@ -1921,6 +1921,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
|
||||
mtspr SPRN_PCR, r6
|
||||
18:
|
||||
/* Signal secondary CPUs to continue */
|
||||
li r0, 0
|
||||
stb r0,VCORE_IN_GUEST(r5)
|
||||
19: lis r8,0x7fff /* MAX_INT@h */
|
||||
mtspr SPRN_HDEC,r8
|
||||
|
@ -761,6 +761,7 @@ static int spufs_init_fs_context(struct fs_context *fc)
|
||||
ctx->gid = current_gid();
|
||||
ctx->mode = 0755;
|
||||
|
||||
fc->fs_private = ctx;
|
||||
fc->s_fs_info = sbi;
|
||||
fc->ops = &spufs_context_ops;
|
||||
return 0;
|
||||
|
@ -1419,6 +1419,9 @@ void __init pseries_lpar_read_hblkrm_characteristics(void)
|
||||
unsigned char local_buffer[SPLPAR_TLB_BIC_MAXLENGTH];
|
||||
int call_status, len, idx, bpsize;
|
||||
|
||||
if (!firmware_has_feature(FW_FEATURE_BLOCK_REMOVE))
|
||||
return;
|
||||
|
||||
spin_lock(&rtas_data_buf_lock);
|
||||
memset(rtas_data_buf, 0, RTAS_DATA_BUF_SIZE);
|
||||
call_status = rtas_call(rtas_token("ibm,get-system-parameter"), 3, 1,
|
||||
|
@ -273,12 +273,11 @@ restore_all:
|
||||
resume_kernel:
|
||||
REG_L s0, TASK_TI_PREEMPT_COUNT(tp)
|
||||
bnez s0, restore_all
|
||||
need_resched:
|
||||
REG_L s0, TASK_TI_FLAGS(tp)
|
||||
andi s0, s0, _TIF_NEED_RESCHED
|
||||
beqz s0, restore_all
|
||||
call preempt_schedule_irq
|
||||
j need_resched
|
||||
j restore_all
|
||||
#endif
|
||||
|
||||
work_pending:
|
||||
|
@ -124,24 +124,24 @@ static inline unsigned long get_break_insn_length(unsigned long pc)
|
||||
|
||||
asmlinkage void do_trap_break(struct pt_regs *regs)
|
||||
{
|
||||
#ifdef CONFIG_GENERIC_BUG
|
||||
if (!user_mode(regs)) {
|
||||
enum bug_trap_type type;
|
||||
|
||||
type = report_bug(regs->sepc, regs);
|
||||
switch (type) {
|
||||
case BUG_TRAP_TYPE_NONE:
|
||||
break;
|
||||
#ifdef CONFIG_GENERIC_BUG
|
||||
case BUG_TRAP_TYPE_WARN:
|
||||
regs->sepc += get_break_insn_length(regs->sepc);
|
||||
break;
|
||||
return;
|
||||
case BUG_TRAP_TYPE_BUG:
|
||||
#endif /* CONFIG_GENERIC_BUG */
|
||||
default:
|
||||
die(regs, "Kernel BUG");
|
||||
}
|
||||
} else {
|
||||
force_sig_fault(SIGTRAP, TRAP_BRKPT,
|
||||
(void __user *)(regs->sepc));
|
||||
}
|
||||
#endif /* CONFIG_GENERIC_BUG */
|
||||
|
||||
force_sig_fault(SIGTRAP, TRAP_BRKPT, (void __user *)(regs->sepc));
|
||||
}
|
||||
|
||||
#ifdef CONFIG_GENERIC_BUG
|
||||
|
@ -83,7 +83,7 @@ raw_copy_to_user(void __user *to, const void *from, unsigned long n);
|
||||
__rc; \
|
||||
})
|
||||
|
||||
static inline int __put_user_fn(void *x, void __user *ptr, unsigned long size)
|
||||
static __always_inline int __put_user_fn(void *x, void __user *ptr, unsigned long size)
|
||||
{
|
||||
unsigned long spec = 0x010000UL;
|
||||
int rc;
|
||||
@ -113,7 +113,7 @@ static inline int __put_user_fn(void *x, void __user *ptr, unsigned long size)
|
||||
return rc;
|
||||
}
|
||||
|
||||
static inline int __get_user_fn(void *x, const void __user *ptr, unsigned long size)
|
||||
static __always_inline int __get_user_fn(void *x, const void __user *ptr, unsigned long size)
|
||||
{
|
||||
unsigned long spec = 0x01UL;
|
||||
int rc;
|
||||
|
@ -5,12 +5,14 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/jiffies.h>
|
||||
#include <asm/apicdef.h>
|
||||
#include <asm/nmi.h>
|
||||
|
||||
#include "../perf_event.h"
|
||||
|
||||
static DEFINE_PER_CPU(unsigned int, perf_nmi_counter);
|
||||
static DEFINE_PER_CPU(unsigned long, perf_nmi_tstamp);
|
||||
static unsigned long perf_nmi_window;
|
||||
|
||||
static __initconst const u64 amd_hw_cache_event_ids
|
||||
[PERF_COUNT_HW_CACHE_MAX]
|
||||
@ -641,11 +643,12 @@ static void amd_pmu_disable_event(struct perf_event *event)
|
||||
* handler when multiple PMCs are active or PMC overflow while handling some
|
||||
* other source of an NMI.
|
||||
*
|
||||
* Attempt to mitigate this by using the number of active PMCs to determine
|
||||
* whether to return NMI_HANDLED if the perf NMI handler did not handle/reset
|
||||
* any PMCs. The per-CPU perf_nmi_counter variable is set to a minimum of the
|
||||
* number of active PMCs or 2. The value of 2 is used in case an NMI does not
|
||||
* arrive at the LAPIC in time to be collapsed into an already pending NMI.
|
||||
* Attempt to mitigate this by creating an NMI window in which un-handled NMIs
|
||||
* received during this window will be claimed. This prevents extending the
|
||||
* window past when it is possible that latent NMIs should be received. The
|
||||
* per-CPU perf_nmi_tstamp will be set to the window end time whenever perf has
|
||||
* handled a counter. When an un-handled NMI is received, it will be claimed
|
||||
* only if arriving within that window.
|
||||
*/
|
||||
static int amd_pmu_handle_irq(struct pt_regs *regs)
|
||||
{
|
||||
@ -663,21 +666,19 @@ static int amd_pmu_handle_irq(struct pt_regs *regs)
|
||||
handled = x86_pmu_handle_irq(regs);
|
||||
|
||||
/*
|
||||
* If a counter was handled, record the number of possible remaining
|
||||
* NMIs that can occur.
|
||||
* If a counter was handled, record a timestamp such that un-handled
|
||||
* NMIs will be claimed if arriving within that window.
|
||||
*/
|
||||
if (handled) {
|
||||
this_cpu_write(perf_nmi_counter,
|
||||
min_t(unsigned int, 2, active));
|
||||
this_cpu_write(perf_nmi_tstamp,
|
||||
jiffies + perf_nmi_window);
|
||||
|
||||
return handled;
|
||||
}
|
||||
|
||||
if (!this_cpu_read(perf_nmi_counter))
|
||||
if (time_after(jiffies, this_cpu_read(perf_nmi_tstamp)))
|
||||
return NMI_DONE;
|
||||
|
||||
this_cpu_dec(perf_nmi_counter);
|
||||
|
||||
return NMI_HANDLED;
|
||||
}
|
||||
|
||||
@ -909,6 +910,9 @@ static int __init amd_core_pmu_init(void)
|
||||
if (!boot_cpu_has(X86_FEATURE_PERFCTR_CORE))
|
||||
return 0;
|
||||
|
||||
/* Avoid calulating the value each time in the NMI handler */
|
||||
perf_nmi_window = msecs_to_jiffies(100);
|
||||
|
||||
switch (boot_cpu_data.x86) {
|
||||
case 0x15:
|
||||
pr_cont("Fam15h ");
|
||||
|
@ -4983,6 +4983,8 @@ __init int intel_pmu_init(void)
|
||||
case INTEL_FAM6_SKYLAKE:
|
||||
case INTEL_FAM6_KABYLAKE_L:
|
||||
case INTEL_FAM6_KABYLAKE:
|
||||
case INTEL_FAM6_COMETLAKE_L:
|
||||
case INTEL_FAM6_COMETLAKE:
|
||||
x86_add_quirk(intel_pebs_isolation_quirk);
|
||||
x86_pmu.late_ack = true;
|
||||
memcpy(hw_cache_event_ids, skl_hw_cache_event_ids, sizeof(hw_cache_event_ids));
|
||||
@ -5031,6 +5033,8 @@ __init int intel_pmu_init(void)
|
||||
/* fall through */
|
||||
case INTEL_FAM6_ICELAKE_L:
|
||||
case INTEL_FAM6_ICELAKE:
|
||||
case INTEL_FAM6_TIGERLAKE_L:
|
||||
case INTEL_FAM6_TIGERLAKE:
|
||||
x86_pmu.late_ack = true;
|
||||
memcpy(hw_cache_event_ids, skl_hw_cache_event_ids, sizeof(hw_cache_event_ids));
|
||||
memcpy(hw_cache_extra_regs, skl_hw_cache_extra_regs, sizeof(hw_cache_extra_regs));
|
||||
|
@ -45,46 +45,49 @@
|
||||
* MSR_CORE_C3_RESIDENCY: CORE C3 Residency Counter
|
||||
* perf code: 0x01
|
||||
* Available model: NHM,WSM,SNB,IVB,HSW,BDW,SKL,GLM,
|
||||
CNL
|
||||
* CNL,KBL,CML
|
||||
* Scope: Core
|
||||
* MSR_CORE_C6_RESIDENCY: CORE C6 Residency Counter
|
||||
* perf code: 0x02
|
||||
* Available model: SLM,AMT,NHM,WSM,SNB,IVB,HSW,BDW,
|
||||
* SKL,KNL,GLM,CNL
|
||||
* SKL,KNL,GLM,CNL,KBL,CML,ICL,TGL
|
||||
* Scope: Core
|
||||
* MSR_CORE_C7_RESIDENCY: CORE C7 Residency Counter
|
||||
* perf code: 0x03
|
||||
* Available model: SNB,IVB,HSW,BDW,SKL,CNL
|
||||
* Available model: SNB,IVB,HSW,BDW,SKL,CNL,KBL,CML,
|
||||
* ICL,TGL
|
||||
* Scope: Core
|
||||
* MSR_PKG_C2_RESIDENCY: Package C2 Residency Counter.
|
||||
* perf code: 0x00
|
||||
* Available model: SNB,IVB,HSW,BDW,SKL,KNL,GLM,CNL
|
||||
* Available model: SNB,IVB,HSW,BDW,SKL,KNL,GLM,CNL,
|
||||
* KBL,CML,ICL,TGL
|
||||
* Scope: Package (physical package)
|
||||
* MSR_PKG_C3_RESIDENCY: Package C3 Residency Counter.
|
||||
* perf code: 0x01
|
||||
* Available model: NHM,WSM,SNB,IVB,HSW,BDW,SKL,KNL,
|
||||
* GLM,CNL
|
||||
* GLM,CNL,KBL,CML,ICL,TGL
|
||||
* Scope: Package (physical package)
|
||||
* MSR_PKG_C6_RESIDENCY: Package C6 Residency Counter.
|
||||
* perf code: 0x02
|
||||
* Available model: SLM,AMT,NHM,WSM,SNB,IVB,HSW,BDW
|
||||
* SKL,KNL,GLM,CNL
|
||||
* SKL,KNL,GLM,CNL,KBL,CML,ICL,TGL
|
||||
* Scope: Package (physical package)
|
||||
* MSR_PKG_C7_RESIDENCY: Package C7 Residency Counter.
|
||||
* perf code: 0x03
|
||||
* Available model: NHM,WSM,SNB,IVB,HSW,BDW,SKL,CNL
|
||||
* Available model: NHM,WSM,SNB,IVB,HSW,BDW,SKL,CNL,
|
||||
* KBL,CML,ICL,TGL
|
||||
* Scope: Package (physical package)
|
||||
* MSR_PKG_C8_RESIDENCY: Package C8 Residency Counter.
|
||||
* perf code: 0x04
|
||||
* Available model: HSW ULT,KBL,CNL
|
||||
* Available model: HSW ULT,KBL,CNL,CML,ICL,TGL
|
||||
* Scope: Package (physical package)
|
||||
* MSR_PKG_C9_RESIDENCY: Package C9 Residency Counter.
|
||||
* perf code: 0x05
|
||||
* Available model: HSW ULT,KBL,CNL
|
||||
* Available model: HSW ULT,KBL,CNL,CML,ICL,TGL
|
||||
* Scope: Package (physical package)
|
||||
* MSR_PKG_C10_RESIDENCY: Package C10 Residency Counter.
|
||||
* perf code: 0x06
|
||||
* Available model: HSW ULT,KBL,GLM,CNL
|
||||
* Available model: HSW ULT,KBL,GLM,CNL,CML,ICL,TGL
|
||||
* Scope: Package (physical package)
|
||||
*
|
||||
*/
|
||||
@ -544,6 +547,19 @@ static const struct cstate_model cnl_cstates __initconst = {
|
||||
BIT(PERF_CSTATE_PKG_C10_RES),
|
||||
};
|
||||
|
||||
static const struct cstate_model icl_cstates __initconst = {
|
||||
.core_events = BIT(PERF_CSTATE_CORE_C6_RES) |
|
||||
BIT(PERF_CSTATE_CORE_C7_RES),
|
||||
|
||||
.pkg_events = BIT(PERF_CSTATE_PKG_C2_RES) |
|
||||
BIT(PERF_CSTATE_PKG_C3_RES) |
|
||||
BIT(PERF_CSTATE_PKG_C6_RES) |
|
||||
BIT(PERF_CSTATE_PKG_C7_RES) |
|
||||
BIT(PERF_CSTATE_PKG_C8_RES) |
|
||||
BIT(PERF_CSTATE_PKG_C9_RES) |
|
||||
BIT(PERF_CSTATE_PKG_C10_RES),
|
||||
};
|
||||
|
||||
static const struct cstate_model slm_cstates __initconst = {
|
||||
.core_events = BIT(PERF_CSTATE_CORE_C1_RES) |
|
||||
BIT(PERF_CSTATE_CORE_C6_RES),
|
||||
@ -614,6 +630,8 @@ static const struct x86_cpu_id intel_cstates_match[] __initconst = {
|
||||
|
||||
X86_CSTATES_MODEL(INTEL_FAM6_KABYLAKE_L, hswult_cstates),
|
||||
X86_CSTATES_MODEL(INTEL_FAM6_KABYLAKE, hswult_cstates),
|
||||
X86_CSTATES_MODEL(INTEL_FAM6_COMETLAKE_L, hswult_cstates),
|
||||
X86_CSTATES_MODEL(INTEL_FAM6_COMETLAKE, hswult_cstates),
|
||||
|
||||
X86_CSTATES_MODEL(INTEL_FAM6_CANNONLAKE_L, cnl_cstates),
|
||||
|
||||
@ -625,8 +643,10 @@ static const struct x86_cpu_id intel_cstates_match[] __initconst = {
|
||||
|
||||
X86_CSTATES_MODEL(INTEL_FAM6_ATOM_GOLDMONT_PLUS, glm_cstates),
|
||||
|
||||
X86_CSTATES_MODEL(INTEL_FAM6_ICELAKE_L, snb_cstates),
|
||||
X86_CSTATES_MODEL(INTEL_FAM6_ICELAKE, snb_cstates),
|
||||
X86_CSTATES_MODEL(INTEL_FAM6_ICELAKE_L, icl_cstates),
|
||||
X86_CSTATES_MODEL(INTEL_FAM6_ICELAKE, icl_cstates),
|
||||
X86_CSTATES_MODEL(INTEL_FAM6_TIGERLAKE_L, icl_cstates),
|
||||
X86_CSTATES_MODEL(INTEL_FAM6_TIGERLAKE, icl_cstates),
|
||||
{ },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(x86cpu, intel_cstates_match);
|
||||
|
@ -89,7 +89,14 @@ static bool test_intel(int idx, void *data)
|
||||
case INTEL_FAM6_SKYLAKE_X:
|
||||
case INTEL_FAM6_KABYLAKE_L:
|
||||
case INTEL_FAM6_KABYLAKE:
|
||||
case INTEL_FAM6_COMETLAKE_L:
|
||||
case INTEL_FAM6_COMETLAKE:
|
||||
case INTEL_FAM6_ICELAKE_L:
|
||||
case INTEL_FAM6_ICELAKE:
|
||||
case INTEL_FAM6_ICELAKE_X:
|
||||
case INTEL_FAM6_ICELAKE_D:
|
||||
case INTEL_FAM6_TIGERLAKE_L:
|
||||
case INTEL_FAM6_TIGERLAKE:
|
||||
if (idx == PERF_MSR_SMI || idx == PERF_MSR_PPERF)
|
||||
return true;
|
||||
break;
|
||||
|
@ -1,4 +1,4 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
|
||||
#ifndef _ASM_X86_CPU_ENTRY_AREA_H
|
||||
#define _ASM_X86_CPU_ENTRY_AREA_H
|
||||
|
@ -83,6 +83,9 @@
|
||||
#define INTEL_FAM6_TIGERLAKE_L 0x8C
|
||||
#define INTEL_FAM6_TIGERLAKE 0x8D
|
||||
|
||||
#define INTEL_FAM6_COMETLAKE 0xA5
|
||||
#define INTEL_FAM6_COMETLAKE_L 0xA6
|
||||
|
||||
/* "Small Core" Processors (Atom) */
|
||||
|
||||
#define INTEL_FAM6_ATOM_BONNELL 0x1C /* Diamondville, Pineview */
|
||||
|
@ -21,7 +21,7 @@
|
||||
#define MWAIT_ECX_INTERRUPT_BREAK 0x1
|
||||
#define MWAITX_ECX_TIMER_ENABLE BIT(1)
|
||||
#define MWAITX_MAX_LOOPS ((u32)-1)
|
||||
#define MWAITX_DISABLE_CSTATES 0xf
|
||||
#define MWAITX_DISABLE_CSTATES 0xf0
|
||||
|
||||
static inline void __monitor(const void *eax, unsigned long ecx,
|
||||
unsigned long edx)
|
||||
|
@ -1,4 +1,4 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef _ASM_X86_PTI_H
|
||||
#define _ASM_X86_PTI_H
|
||||
#ifndef __ASSEMBLY__
|
||||
|
@ -734,5 +734,28 @@ do { \
|
||||
if (unlikely(__gu_err)) goto err_label; \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* We want the unsafe accessors to always be inlined and use
|
||||
* the error labels - thus the macro games.
|
||||
*/
|
||||
#define unsafe_copy_loop(dst, src, len, type, label) \
|
||||
while (len >= sizeof(type)) { \
|
||||
unsafe_put_user(*(type *)src,(type __user *)dst,label); \
|
||||
dst += sizeof(type); \
|
||||
src += sizeof(type); \
|
||||
len -= sizeof(type); \
|
||||
}
|
||||
|
||||
#define unsafe_copy_to_user(_dst,_src,_len,label) \
|
||||
do { \
|
||||
char __user *__ucu_dst = (_dst); \
|
||||
const char *__ucu_src = (_src); \
|
||||
size_t __ucu_len = (_len); \
|
||||
unsafe_copy_loop(__ucu_dst, __ucu_src, __ucu_len, u64, label); \
|
||||
unsafe_copy_loop(__ucu_dst, __ucu_src, __ucu_len, u32, label); \
|
||||
unsafe_copy_loop(__ucu_dst, __ucu_src, __ucu_len, u16, label); \
|
||||
unsafe_copy_loop(__ucu_dst, __ucu_src, __ucu_len, u8, label); \
|
||||
} while (0)
|
||||
|
||||
#endif /* _ASM_X86_UACCESS_H */
|
||||
|
||||
|
@ -49,7 +49,7 @@
|
||||
#define VMWARE_CMD_VCPU_RESERVED 31
|
||||
|
||||
#define VMWARE_PORT(cmd, eax, ebx, ecx, edx) \
|
||||
__asm__("inl (%%dx)" : \
|
||||
__asm__("inl (%%dx), %%eax" : \
|
||||
"=a"(eax), "=c"(ecx), "=d"(edx), "=b"(ebx) : \
|
||||
"a"(VMWARE_HYPERVISOR_MAGIC), \
|
||||
"c"(VMWARE_CMD_##cmd), \
|
||||
|
@ -1,4 +1,4 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
//
|
||||
// Code shared between 32 and 64 bit
|
||||
|
||||
|
@ -113,8 +113,8 @@ static void delay_mwaitx(unsigned long __loops)
|
||||
__monitorx(raw_cpu_ptr(&cpu_tss_rw), 0, 0);
|
||||
|
||||
/*
|
||||
* AMD, like Intel, supports the EAX hint and EAX=0xf
|
||||
* means, do not enter any deep C-state and we use it
|
||||
* AMD, like Intel's MWAIT version, supports the EAX hint and
|
||||
* EAX=0xf0 means, do not enter any deep C-state and we use it
|
||||
* here in delay() to minimize wakeup latency.
|
||||
*/
|
||||
__mwaitx(MWAITX_DISABLE_CSTATES, delay, MWAITX_ECX_TIMER_ENABLE);
|
||||
|
@ -917,9 +917,6 @@ static void __init kexec_enter_virtual_mode(void)
|
||||
|
||||
if (efi_enabled(EFI_OLD_MEMMAP) && (__supported_pte_mask & _PAGE_NX))
|
||||
runtime_code_page_mkexec();
|
||||
|
||||
/* clean DUMMY object */
|
||||
efi_delete_dummy_variable();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -269,19 +269,41 @@ void xen_reboot(int reason)
|
||||
BUG();
|
||||
}
|
||||
|
||||
static int reboot_reason = SHUTDOWN_reboot;
|
||||
static bool xen_legacy_crash;
|
||||
void xen_emergency_restart(void)
|
||||
{
|
||||
xen_reboot(SHUTDOWN_reboot);
|
||||
xen_reboot(reboot_reason);
|
||||
}
|
||||
|
||||
static int
|
||||
xen_panic_event(struct notifier_block *this, unsigned long event, void *ptr)
|
||||
{
|
||||
if (!kexec_crash_loaded())
|
||||
xen_reboot(SHUTDOWN_crash);
|
||||
if (!kexec_crash_loaded()) {
|
||||
if (xen_legacy_crash)
|
||||
xen_reboot(SHUTDOWN_crash);
|
||||
|
||||
reboot_reason = SHUTDOWN_crash;
|
||||
|
||||
/*
|
||||
* If panic_timeout==0 then we are supposed to wait forever.
|
||||
* However, to preserve original dom0 behavior we have to drop
|
||||
* into hypervisor. (domU behavior is controlled by its
|
||||
* config file)
|
||||
*/
|
||||
if (panic_timeout == 0)
|
||||
panic_timeout = -1;
|
||||
}
|
||||
return NOTIFY_DONE;
|
||||
}
|
||||
|
||||
static int __init parse_xen_legacy_crash(char *arg)
|
||||
{
|
||||
xen_legacy_crash = true;
|
||||
return 0;
|
||||
}
|
||||
early_param("xen_legacy_crash", parse_xen_legacy_crash);
|
||||
|
||||
static struct notifier_block xen_panic_block = {
|
||||
.notifier_call = xen_panic_event,
|
||||
.priority = INT_MIN
|
||||
|
@ -160,24 +160,27 @@ bool rq_depth_calc_max_depth(struct rq_depth *rqd)
|
||||
return ret;
|
||||
}
|
||||
|
||||
void rq_depth_scale_up(struct rq_depth *rqd)
|
||||
/* Returns true on success and false if scaling up wasn't possible */
|
||||
bool rq_depth_scale_up(struct rq_depth *rqd)
|
||||
{
|
||||
/*
|
||||
* Hit max in previous round, stop here
|
||||
*/
|
||||
if (rqd->scaled_max)
|
||||
return;
|
||||
return false;
|
||||
|
||||
rqd->scale_step--;
|
||||
|
||||
rqd->scaled_max = rq_depth_calc_max_depth(rqd);
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Scale rwb down. If 'hard_throttle' is set, do it quicker, since we
|
||||
* had a latency violation.
|
||||
* had a latency violation. Returns true on success and returns false if
|
||||
* scaling down wasn't possible.
|
||||
*/
|
||||
void rq_depth_scale_down(struct rq_depth *rqd, bool hard_throttle)
|
||||
bool rq_depth_scale_down(struct rq_depth *rqd, bool hard_throttle)
|
||||
{
|
||||
/*
|
||||
* Stop scaling down when we've hit the limit. This also prevents
|
||||
@ -185,7 +188,7 @@ void rq_depth_scale_down(struct rq_depth *rqd, bool hard_throttle)
|
||||
* keep up.
|
||||
*/
|
||||
if (rqd->max_depth == 1)
|
||||
return;
|
||||
return false;
|
||||
|
||||
if (rqd->scale_step < 0 && hard_throttle)
|
||||
rqd->scale_step = 0;
|
||||
@ -194,6 +197,7 @@ void rq_depth_scale_down(struct rq_depth *rqd, bool hard_throttle)
|
||||
|
||||
rqd->scaled_max = false;
|
||||
rq_depth_calc_max_depth(rqd);
|
||||
return true;
|
||||
}
|
||||
|
||||
struct rq_qos_wait_data {
|
||||
|
@ -130,8 +130,8 @@ void rq_qos_wait(struct rq_wait *rqw, void *private_data,
|
||||
acquire_inflight_cb_t *acquire_inflight_cb,
|
||||
cleanup_cb_t *cleanup_cb);
|
||||
bool rq_wait_inc_below(struct rq_wait *rq_wait, unsigned int limit);
|
||||
void rq_depth_scale_up(struct rq_depth *rqd);
|
||||
void rq_depth_scale_down(struct rq_depth *rqd, bool hard_throttle);
|
||||
bool rq_depth_scale_up(struct rq_depth *rqd);
|
||||
bool rq_depth_scale_down(struct rq_depth *rqd, bool hard_throttle);
|
||||
bool rq_depth_calc_max_depth(struct rq_depth *rqd);
|
||||
|
||||
void __rq_qos_cleanup(struct rq_qos *rqos, struct bio *bio);
|
||||
|
@ -308,7 +308,8 @@ static void calc_wb_limits(struct rq_wb *rwb)
|
||||
|
||||
static void scale_up(struct rq_wb *rwb)
|
||||
{
|
||||
rq_depth_scale_up(&rwb->rq_depth);
|
||||
if (!rq_depth_scale_up(&rwb->rq_depth))
|
||||
return;
|
||||
calc_wb_limits(rwb);
|
||||
rwb->unknown_cnt = 0;
|
||||
rwb_wake_all(rwb);
|
||||
@ -317,7 +318,8 @@ static void scale_up(struct rq_wb *rwb)
|
||||
|
||||
static void scale_down(struct rq_wb *rwb, bool hard_throttle)
|
||||
{
|
||||
rq_depth_scale_down(&rwb->rq_depth, hard_throttle);
|
||||
if (!rq_depth_scale_down(&rwb->rq_depth, hard_throttle))
|
||||
return;
|
||||
calc_wb_limits(rwb);
|
||||
rwb->unknown_cnt = 0;
|
||||
rwb_trace_step(rwb, "scale down");
|
||||
|
@ -57,6 +57,7 @@
|
||||
#include <linux/sched/signal.h>
|
||||
#include <linux/sched/mm.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/pid_namespace.h>
|
||||
#include <linux/security.h>
|
||||
@ -66,6 +67,7 @@
|
||||
#include <linux/task_work.h>
|
||||
|
||||
#include <uapi/linux/android/binder.h>
|
||||
#include <uapi/linux/android/binderfs.h>
|
||||
|
||||
#include <asm/cacheflush.h>
|
||||
|
||||
@ -2876,7 +2878,7 @@ static void binder_transaction(struct binder_proc *proc,
|
||||
e->target_handle = tr->target.handle;
|
||||
e->data_size = tr->data_size;
|
||||
e->offsets_size = tr->offsets_size;
|
||||
e->context_name = proc->context->name;
|
||||
strscpy(e->context_name, proc->context->name, BINDERFS_MAX_NAME);
|
||||
|
||||
if (reply) {
|
||||
binder_inner_proc_lock(proc);
|
||||
|
@ -156,7 +156,7 @@ static struct binder_buffer *binder_alloc_prepare_to_free_locked(
|
||||
}
|
||||
|
||||
/**
|
||||
* binder_alloc_buffer_lookup() - get buffer given user ptr
|
||||
* binder_alloc_prepare_to_free() - get buffer given user ptr
|
||||
* @alloc: binder_alloc for this proc
|
||||
* @user_ptr: User pointer to buffer data
|
||||
*
|
||||
|
@ -130,7 +130,7 @@ struct binder_transaction_log_entry {
|
||||
int return_error_line;
|
||||
uint32_t return_error;
|
||||
uint32_t return_error_param;
|
||||
const char *context_name;
|
||||
char context_name[BINDERFS_MAX_NAME + 1];
|
||||
};
|
||||
|
||||
struct binder_transaction_log {
|
||||
|
@ -4791,27 +4791,6 @@ void ata_scsi_hotplug(struct work_struct *work)
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* XXX - UGLY HACK
|
||||
*
|
||||
* The block layer suspend/resume path is fundamentally broken due
|
||||
* to freezable kthreads and workqueue and may deadlock if a block
|
||||
* device gets removed while resume is in progress. I don't know
|
||||
* what the solution is short of removing freezable kthreads and
|
||||
* workqueues altogether.
|
||||
*
|
||||
* The following is an ugly hack to avoid kicking off device
|
||||
* removal while freezer is active. This is a joke but does avoid
|
||||
* this particular deadlock scenario.
|
||||
*
|
||||
* https://bugzilla.kernel.org/show_bug.cgi?id=62801
|
||||
* http://marc.info/?l=linux-kernel&m=138695698516487
|
||||
*/
|
||||
#ifdef CONFIG_FREEZER
|
||||
while (pm_freezing)
|
||||
msleep(10);
|
||||
#endif
|
||||
|
||||
DPRINTK("ENTER\n");
|
||||
mutex_lock(&ap->scsi_scan_mutex);
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user