mirror of https://gitee.com/openkylin/linux.git
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux into drm-next
Backmerge Linus master to get the connector locking revert. * 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux: (645 commits) sysctl: fix proc_doulongvec_ms_jiffies_minmax() Revert "drm/probe-helpers: Drop locking from poll_enable" MAINTAINERS: add Dan Streetman to zbud maintainers MAINTAINERS: add Dan Streetman to zswap maintainers mm: do not export ioremap_page_range symbol for external module mn10300: fix build error of missing fpu_save() romfs: use different way to generate fsid for BLOCK or MTD frv: add missing atomic64 operations mm, page_alloc: fix premature OOM when racing with cpuset mems update mm, page_alloc: move cpuset seqcount checking to slowpath mm, page_alloc: fix fast-path race with cpuset update or removal mm, page_alloc: fix check for NULL preferred_zone kernel/panic.c: add missing \n fbdev: color map copying bounds checking frv: add atomic64_add_unless() mm/mempolicy.c: do not put mempolicy before using its nodemask radix-tree: fix private list warnings Documentation/filesystems/proc.txt: add VmPin mm, memcg: do not retry precharge charges proc: add a schedule point in proc_pid_readdir() ...
This commit is contained in:
commit
b0df0b251b
4
.mailmap
4
.mailmap
|
@ -137,6 +137,7 @@ Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
|
||||||
Rudolf Marek <R.Marek@sh.cvut.cz>
|
Rudolf Marek <R.Marek@sh.cvut.cz>
|
||||||
Rui Saraiva <rmps@joel.ist.utl.pt>
|
Rui Saraiva <rmps@joel.ist.utl.pt>
|
||||||
Sachin P Sant <ssant@in.ibm.com>
|
Sachin P Sant <ssant@in.ibm.com>
|
||||||
|
Sarangdhar Joshi <spjoshi@codeaurora.org>
|
||||||
Sam Ravnborg <sam@mars.ravnborg.org>
|
Sam Ravnborg <sam@mars.ravnborg.org>
|
||||||
Santosh Shilimkar <ssantosh@kernel.org>
|
Santosh Shilimkar <ssantosh@kernel.org>
|
||||||
Santosh Shilimkar <santosh.shilimkar@oracle.org>
|
Santosh Shilimkar <santosh.shilimkar@oracle.org>
|
||||||
|
@ -150,10 +151,13 @@ Shuah Khan <shuah@kernel.org> <shuah.kh@samsung.com>
|
||||||
Simon Kelley <simon@thekelleys.org.uk>
|
Simon Kelley <simon@thekelleys.org.uk>
|
||||||
Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr>
|
Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr>
|
||||||
Stephen Hemminger <shemminger@osdl.org>
|
Stephen Hemminger <shemminger@osdl.org>
|
||||||
|
Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
|
||||||
|
Subhash Jadavani <subhashj@codeaurora.org>
|
||||||
Sudeep Holla <sudeep.holla@arm.com> Sudeep KarkadaNagesha <sudeep.karkadanagesha@arm.com>
|
Sudeep Holla <sudeep.holla@arm.com> Sudeep KarkadaNagesha <sudeep.karkadanagesha@arm.com>
|
||||||
Sumit Semwal <sumit.semwal@ti.com>
|
Sumit Semwal <sumit.semwal@ti.com>
|
||||||
Tejun Heo <htejun@gmail.com>
|
Tejun Heo <htejun@gmail.com>
|
||||||
Thomas Graf <tgraf@suug.ch>
|
Thomas Graf <tgraf@suug.ch>
|
||||||
|
Thomas Pedersen <twp@codeaurora.org>
|
||||||
Tony Luck <tony.luck@intel.com>
|
Tony Luck <tony.luck@intel.com>
|
||||||
Tsuneo Yoshioka <Tsuneo.Yoshioka@f-secure.com>
|
Tsuneo Yoshioka <Tsuneo.Yoshioka@f-secure.com>
|
||||||
Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de>
|
Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de>
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
What: /sys/devices/.../deferred_probe
|
|
||||||
Date: August 2016
|
|
||||||
Contact: Ben Hutchings <ben.hutchings@codethink.co.uk>
|
|
||||||
Description:
|
|
||||||
The /sys/devices/.../deferred_probe attribute is
|
|
||||||
present for all devices. If a driver detects during
|
|
||||||
probing a device that a related device is not yet
|
|
||||||
ready, it may defer probing of the first device. The
|
|
||||||
kernel will retry probing the first device after any
|
|
||||||
other device is successfully probed. This attribute
|
|
||||||
reads as 1 if probing of this device is currently
|
|
||||||
deferred, or 0 otherwise.
|
|
|
@ -62,6 +62,9 @@ wants to support one of the below features, it should adapt the bindings below.
|
||||||
"irq" and "wakeup" names are recognized by I2C core, other names are
|
"irq" and "wakeup" names are recognized by I2C core, other names are
|
||||||
left to individual drivers.
|
left to individual drivers.
|
||||||
|
|
||||||
|
- host-notify
|
||||||
|
device uses SMBus host notify protocol instead of interrupt line.
|
||||||
|
|
||||||
- multi-master
|
- multi-master
|
||||||
states that there is another master active on this bus. The OS can use
|
states that there is another master active on this bus. The OS can use
|
||||||
this information to adapt power management to keep the arbitration awake
|
this information to adapt power management to keep the arbitration awake
|
||||||
|
@ -81,6 +84,11 @@ Binding may contain optional "interrupts" property, describing interrupts
|
||||||
used by the device. I2C core will assign "irq" interrupt (or the very first
|
used by the device. I2C core will assign "irq" interrupt (or the very first
|
||||||
interrupt if not using interrupt names) as primary interrupt for the slave.
|
interrupt if not using interrupt names) as primary interrupt for the slave.
|
||||||
|
|
||||||
|
Alternatively, devices supporting SMbus Host Notify, and connected to
|
||||||
|
adapters that support this feature, may use "host-notify" property. I2C
|
||||||
|
core will create a virtual interrupt for Host Notify and assign it as
|
||||||
|
primary interrupt for the slave.
|
||||||
|
|
||||||
Also, if device is marked as a wakeup source, I2C core will set up "wakeup"
|
Also, if device is marked as a wakeup source, I2C core will set up "wakeup"
|
||||||
interrupt for the device. If "wakeup" interrupt name is not present in the
|
interrupt for the device. If "wakeup" interrupt name is not present in the
|
||||||
binding, then primary interrupt will be used as wakeup interrupt.
|
binding, then primary interrupt will be used as wakeup interrupt.
|
||||||
|
|
|
@ -5,7 +5,7 @@ Required properties:
|
||||||
- compatible: "sigma,smp8758-nand"
|
- compatible: "sigma,smp8758-nand"
|
||||||
- reg: address/size of nfc_reg, nfc_mem, and pbus_reg
|
- reg: address/size of nfc_reg, nfc_mem, and pbus_reg
|
||||||
- dmas: reference to the DMA channel used by the controller
|
- dmas: reference to the DMA channel used by the controller
|
||||||
- dma-names: "nfc_sbox"
|
- dma-names: "rxtx"
|
||||||
- clocks: reference to the system clock
|
- clocks: reference to the system clock
|
||||||
- #address-cells: <1>
|
- #address-cells: <1>
|
||||||
- #size-cells: <0>
|
- #size-cells: <0>
|
||||||
|
@ -17,9 +17,9 @@ Example:
|
||||||
|
|
||||||
nandc: nand-controller@2c000 {
|
nandc: nand-controller@2c000 {
|
||||||
compatible = "sigma,smp8758-nand";
|
compatible = "sigma,smp8758-nand";
|
||||||
reg = <0x2c000 0x30 0x2d000 0x800 0x20000 0x1000>;
|
reg = <0x2c000 0x30>, <0x2d000 0x800>, <0x20000 0x1000>;
|
||||||
dmas = <&dma0 3>;
|
dmas = <&dma0 3>;
|
||||||
dma-names = "nfc_sbox";
|
dma-names = "rxtx";
|
||||||
clocks = <&clkgen SYS_CLK>;
|
clocks = <&clkgen SYS_CLK>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
|
|
@ -3,9 +3,11 @@
|
||||||
Required properties:
|
Required properties:
|
||||||
- reg - The ID number for the phy, usually a small integer
|
- reg - The ID number for the phy, usually a small integer
|
||||||
- ti,rx-internal-delay - RGMII Receive Clock Delay - see dt-bindings/net/ti-dp83867.h
|
- ti,rx-internal-delay - RGMII Receive Clock Delay - see dt-bindings/net/ti-dp83867.h
|
||||||
for applicable values
|
for applicable values. Required only if interface type is
|
||||||
|
PHY_INTERFACE_MODE_RGMII_ID or PHY_INTERFACE_MODE_RGMII_RXID
|
||||||
- ti,tx-internal-delay - RGMII Transmit Clock Delay - see dt-bindings/net/ti-dp83867.h
|
- ti,tx-internal-delay - RGMII Transmit Clock Delay - see dt-bindings/net/ti-dp83867.h
|
||||||
for applicable values
|
for applicable values. Required only if interface type is
|
||||||
|
PHY_INTERFACE_MODE_RGMII_ID or PHY_INTERFACE_MODE_RGMII_TXID
|
||||||
- ti,fifo-depth - Transmitt FIFO depth- see dt-bindings/net/ti-dp83867.h
|
- ti,fifo-depth - Transmitt FIFO depth- see dt-bindings/net/ti-dp83867.h
|
||||||
for applicable values
|
for applicable values
|
||||||
|
|
||||||
|
|
|
@ -1,17 +1,23 @@
|
||||||
Renesas MSIOF spi controller
|
Renesas MSIOF spi controller
|
||||||
|
|
||||||
Required properties:
|
Required properties:
|
||||||
- compatible : "renesas,msiof-<soctype>" for SoCs,
|
- compatible : "renesas,msiof-r8a7790" (R-Car H2)
|
||||||
"renesas,sh-msiof" for SuperH, or
|
|
||||||
"renesas,sh-mobile-msiof" for SH Mobile series.
|
|
||||||
Examples with soctypes are:
|
|
||||||
"renesas,msiof-r8a7790" (R-Car H2)
|
|
||||||
"renesas,msiof-r8a7791" (R-Car M2-W)
|
"renesas,msiof-r8a7791" (R-Car M2-W)
|
||||||
"renesas,msiof-r8a7792" (R-Car V2H)
|
"renesas,msiof-r8a7792" (R-Car V2H)
|
||||||
"renesas,msiof-r8a7793" (R-Car M2-N)
|
"renesas,msiof-r8a7793" (R-Car M2-N)
|
||||||
"renesas,msiof-r8a7794" (R-Car E2)
|
"renesas,msiof-r8a7794" (R-Car E2)
|
||||||
"renesas,msiof-r8a7796" (R-Car M3-W)
|
"renesas,msiof-r8a7796" (R-Car M3-W)
|
||||||
"renesas,msiof-sh73a0" (SH-Mobile AG5)
|
"renesas,msiof-sh73a0" (SH-Mobile AG5)
|
||||||
|
"renesas,sh-mobile-msiof" (generic SH-Mobile compatibile device)
|
||||||
|
"renesas,rcar-gen2-msiof" (generic R-Car Gen2 compatible device)
|
||||||
|
"renesas,rcar-gen3-msiof" (generic R-Car Gen3 compatible device)
|
||||||
|
"renesas,sh-msiof" (deprecated)
|
||||||
|
|
||||||
|
When compatible with the generic version, nodes
|
||||||
|
must list the SoC-specific version corresponding
|
||||||
|
to the platform first followed by the generic
|
||||||
|
version.
|
||||||
|
|
||||||
- reg : A list of offsets and lengths of the register sets for
|
- reg : A list of offsets and lengths of the register sets for
|
||||||
the device.
|
the device.
|
||||||
If only one register set is present, it is to be used
|
If only one register set is present, it is to be used
|
||||||
|
@ -61,7 +67,8 @@ Documentation/devicetree/bindings/pinctrl/renesas,*.
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
msiof0: spi@e6e20000 {
|
msiof0: spi@e6e20000 {
|
||||||
compatible = "renesas,msiof-r8a7791";
|
compatible = "renesas,msiof-r8a7791",
|
||||||
|
"renesas,rcar-gen2-msiof";
|
||||||
reg = <0 0xe6e20000 0 0x0064>;
|
reg = <0 0xe6e20000 0 0x0064>;
|
||||||
interrupts = <0 156 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 156 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&mstp0_clks R8A7791_CLK_MSIOF0>;
|
clocks = <&mstp0_clks R8A7791_CLK_MSIOF0>;
|
||||||
|
|
|
@ -212,10 +212,11 @@ asynchronous manner and the value may not be very precise. To see a precise
|
||||||
snapshot of a moment, you can see /proc/<pid>/smaps file and scan page table.
|
snapshot of a moment, you can see /proc/<pid>/smaps file and scan page table.
|
||||||
It's slow but very precise.
|
It's slow but very precise.
|
||||||
|
|
||||||
Table 1-2: Contents of the status files (as of 4.1)
|
Table 1-2: Contents of the status files (as of 4.8)
|
||||||
..............................................................................
|
..............................................................................
|
||||||
Field Content
|
Field Content
|
||||||
Name filename of the executable
|
Name filename of the executable
|
||||||
|
Umask file mode creation mask
|
||||||
State state (R is running, S is sleeping, D is sleeping
|
State state (R is running, S is sleeping, D is sleeping
|
||||||
in an uninterruptible wait, Z is zombie,
|
in an uninterruptible wait, Z is zombie,
|
||||||
T is traced or stopped)
|
T is traced or stopped)
|
||||||
|
@ -226,7 +227,6 @@ Table 1-2: Contents of the status files (as of 4.1)
|
||||||
TracerPid PID of process tracing this process (0 if not)
|
TracerPid PID of process tracing this process (0 if not)
|
||||||
Uid Real, effective, saved set, and file system UIDs
|
Uid Real, effective, saved set, and file system UIDs
|
||||||
Gid Real, effective, saved set, and file system GIDs
|
Gid Real, effective, saved set, and file system GIDs
|
||||||
Umask file mode creation mask
|
|
||||||
FDSize number of file descriptor slots currently allocated
|
FDSize number of file descriptor slots currently allocated
|
||||||
Groups supplementary group list
|
Groups supplementary group list
|
||||||
NStgid descendant namespace thread group ID hierarchy
|
NStgid descendant namespace thread group ID hierarchy
|
||||||
|
@ -236,6 +236,7 @@ Table 1-2: Contents of the status files (as of 4.1)
|
||||||
VmPeak peak virtual memory size
|
VmPeak peak virtual memory size
|
||||||
VmSize total program size
|
VmSize total program size
|
||||||
VmLck locked memory size
|
VmLck locked memory size
|
||||||
|
VmPin pinned memory size
|
||||||
VmHWM peak resident set size ("high water mark")
|
VmHWM peak resident set size ("high water mark")
|
||||||
VmRSS size of memory portions. It contains the three
|
VmRSS size of memory portions. It contains the three
|
||||||
following parts (VmRSS = RssAnon + RssFile + RssShmem)
|
following parts (VmRSS = RssAnon + RssFile + RssShmem)
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
Page fragments
|
||||||
|
--------------
|
||||||
|
|
||||||
|
A page fragment is an arbitrary-length arbitrary-offset area of memory
|
||||||
|
which resides within a 0 or higher order compound page. Multiple
|
||||||
|
fragments within that page are individually refcounted, in the page's
|
||||||
|
reference counter.
|
||||||
|
|
||||||
|
The page_frag functions, page_frag_alloc and page_frag_free, provide a
|
||||||
|
simple allocation framework for page fragments. This is used by the
|
||||||
|
network stack and network device drivers to provide a backing region of
|
||||||
|
memory for use as either an sk_buff->head, or to be used in the "frags"
|
||||||
|
portion of skb_shared_info.
|
||||||
|
|
||||||
|
In order to make use of the page fragment APIs a backing page fragment
|
||||||
|
cache is needed. This provides a central point for the fragment allocation
|
||||||
|
and tracks allows multiple calls to make use of a cached page. The
|
||||||
|
advantage to doing this is that multiple calls to get_page can be avoided
|
||||||
|
which can be expensive at allocation time. However due to the nature of
|
||||||
|
this caching it is required that any calls to the cache be protected by
|
||||||
|
either a per-cpu limitation, or a per-cpu limitation and forcing interrupts
|
||||||
|
to be disabled when executing the fragment allocation.
|
||||||
|
|
||||||
|
The network stack uses two separate caches per CPU to handle fragment
|
||||||
|
allocation. The netdev_alloc_cache is used by callers making use of the
|
||||||
|
__netdev_alloc_frag and __netdev_alloc_skb calls. The napi_alloc_cache is
|
||||||
|
used by callers of the __napi_alloc_frag and __napi_alloc_skb calls. The
|
||||||
|
main difference between these two calls is the context in which they may be
|
||||||
|
called. The "netdev" prefixed functions are usable in any context as these
|
||||||
|
functions will disable interrupts, while the "napi" prefixed functions are
|
||||||
|
only usable within the softirq context.
|
||||||
|
|
||||||
|
Many network device drivers use a similar methodology for allocating page
|
||||||
|
fragments, but the page fragments are cached at the ring or descriptor
|
||||||
|
level. In order to enable these cases it is necessary to provide a generic
|
||||||
|
way of tearing down a page cache. For this reason __page_frag_cache_drain
|
||||||
|
was implemented. It allows for freeing multiple references from a single
|
||||||
|
page via a single call. The advantage to doing this is that it allows for
|
||||||
|
cleaning up the multiple references that were added to a page in order to
|
||||||
|
avoid calling get_page per allocation.
|
||||||
|
|
||||||
|
Alexander Duyck, Nov 29, 2016.
|
50
MAINTAINERS
50
MAINTAINERS
|
@ -81,7 +81,6 @@ Descriptions of section entries:
|
||||||
Q: Patchwork web based patch tracking system site
|
Q: Patchwork web based patch tracking system site
|
||||||
T: SCM tree type and location.
|
T: SCM tree type and location.
|
||||||
Type is one of: git, hg, quilt, stgit, topgit
|
Type is one of: git, hg, quilt, stgit, topgit
|
||||||
B: Bug tracking system location.
|
|
||||||
S: Status, one of the following:
|
S: Status, one of the following:
|
||||||
Supported: Someone is actually paid to look after this.
|
Supported: Someone is actually paid to look after this.
|
||||||
Maintained: Someone actually looks after it.
|
Maintained: Someone actually looks after it.
|
||||||
|
@ -977,6 +976,7 @@ M: Russell King <linux@armlinux.org.uk>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
W: http://www.armlinux.org.uk/
|
W: http://www.armlinux.org.uk/
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
T: git git://git.armlinux.org.uk/~rmk/linux-arm.git
|
||||||
F: arch/arm/
|
F: arch/arm/
|
||||||
|
|
||||||
ARM SUB-ARCHITECTURES
|
ARM SUB-ARCHITECTURES
|
||||||
|
@ -1154,6 +1154,7 @@ ARM/CLKDEV SUPPORT
|
||||||
M: Russell King <linux@armlinux.org.uk>
|
M: Russell King <linux@armlinux.org.uk>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
T: git git://git.armlinux.org.uk/~rmk/linux-arm.git clkdev
|
||||||
F: arch/arm/include/asm/clkdev.h
|
F: arch/arm/include/asm/clkdev.h
|
||||||
F: drivers/clk/clkdev.c
|
F: drivers/clk/clkdev.c
|
||||||
|
|
||||||
|
@ -1689,6 +1690,7 @@ M: Krzysztof Kozlowski <krzk@kernel.org>
|
||||||
R: Javier Martinez Canillas <javier@osg.samsung.com>
|
R: Javier Martinez Canillas <javier@osg.samsung.com>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
|
L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
|
||||||
|
Q: https://patchwork.kernel.org/project/linux-samsung-soc/list/
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: arch/arm/boot/dts/s3c*
|
F: arch/arm/boot/dts/s3c*
|
||||||
F: arch/arm/boot/dts/s5p*
|
F: arch/arm/boot/dts/s5p*
|
||||||
|
@ -2194,14 +2196,6 @@ L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||||
S: Supported
|
S: Supported
|
||||||
F: sound/soc/atmel
|
F: sound/soc/atmel
|
||||||
|
|
||||||
ATMEL DMA DRIVER
|
|
||||||
M: Nicolas Ferre <nicolas.ferre@atmel.com>
|
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
|
||||||
S: Supported
|
|
||||||
F: drivers/dma/at_hdmac.c
|
|
||||||
F: drivers/dma/at_hdmac_regs.h
|
|
||||||
F: include/linux/platform_data/dma-atmel.h
|
|
||||||
|
|
||||||
ATMEL XDMA DRIVER
|
ATMEL XDMA DRIVER
|
||||||
M: Ludovic Desroches <ludovic.desroches@atmel.com>
|
M: Ludovic Desroches <ludovic.desroches@atmel.com>
|
||||||
L: linux-arm-kernel@lists.infradead.org
|
L: linux-arm-kernel@lists.infradead.org
|
||||||
|
@ -4106,18 +4100,24 @@ F: drivers/gpu/drm/bridge/
|
||||||
|
|
||||||
DRM DRIVER FOR BOCHS VIRTUAL GPU
|
DRM DRIVER FOR BOCHS VIRTUAL GPU
|
||||||
M: Gerd Hoffmann <kraxel@redhat.com>
|
M: Gerd Hoffmann <kraxel@redhat.com>
|
||||||
S: Odd Fixes
|
L: virtualization@lists.linux-foundation.org
|
||||||
|
T: git git://git.kraxel.org/linux drm-qemu
|
||||||
|
S: Maintained
|
||||||
F: drivers/gpu/drm/bochs/
|
F: drivers/gpu/drm/bochs/
|
||||||
|
|
||||||
DRM DRIVER FOR QEMU'S CIRRUS DEVICE
|
DRM DRIVER FOR QEMU'S CIRRUS DEVICE
|
||||||
M: Dave Airlie <airlied@redhat.com>
|
M: Dave Airlie <airlied@redhat.com>
|
||||||
S: Odd Fixes
|
M: Gerd Hoffmann <kraxel@redhat.com>
|
||||||
|
L: virtualization@lists.linux-foundation.org
|
||||||
|
T: git git://git.kraxel.org/linux drm-qemu
|
||||||
|
S: Obsolete
|
||||||
|
W: https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/
|
||||||
F: drivers/gpu/drm/cirrus/
|
F: drivers/gpu/drm/cirrus/
|
||||||
|
|
||||||
RADEON and AMDGPU DRM DRIVERS
|
RADEON and AMDGPU DRM DRIVERS
|
||||||
M: Alex Deucher <alexander.deucher@amd.com>
|
M: Alex Deucher <alexander.deucher@amd.com>
|
||||||
M: Christian König <christian.koenig@amd.com>
|
M: Christian König <christian.koenig@amd.com>
|
||||||
L: dri-devel@lists.freedesktop.org
|
L: amd-gfx@lists.freedesktop.org
|
||||||
T: git git://people.freedesktop.org/~agd5f/linux
|
T: git git://people.freedesktop.org/~agd5f/linux
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/gpu/drm/radeon/
|
F: drivers/gpu/drm/radeon/
|
||||||
|
@ -4304,7 +4304,10 @@ F: Documentation/devicetree/bindings/display/renesas,du.txt
|
||||||
|
|
||||||
DRM DRIVER FOR QXL VIRTUAL GPU
|
DRM DRIVER FOR QXL VIRTUAL GPU
|
||||||
M: Dave Airlie <airlied@redhat.com>
|
M: Dave Airlie <airlied@redhat.com>
|
||||||
S: Odd Fixes
|
M: Gerd Hoffmann <kraxel@redhat.com>
|
||||||
|
L: virtualization@lists.linux-foundation.org
|
||||||
|
T: git git://git.kraxel.org/linux drm-qemu
|
||||||
|
S: Maintained
|
||||||
F: drivers/gpu/drm/qxl/
|
F: drivers/gpu/drm/qxl/
|
||||||
F: include/uapi/drm/qxl_drm.h
|
F: include/uapi/drm/qxl_drm.h
|
||||||
|
|
||||||
|
@ -7706,8 +7709,10 @@ F: drivers/net/dsa/mv88e6xxx/
|
||||||
F: Documentation/devicetree/bindings/net/dsa/marvell.txt
|
F: Documentation/devicetree/bindings/net/dsa/marvell.txt
|
||||||
|
|
||||||
MARVELL ARMADA DRM SUPPORT
|
MARVELL ARMADA DRM SUPPORT
|
||||||
M: Russell King <rmk+kernel@armlinux.org.uk>
|
M: Russell King <linux@armlinux.org.uk>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
T: git git://git.armlinux.org.uk/~rmk/linux-arm.git drm-armada-devel
|
||||||
|
T: git git://git.armlinux.org.uk/~rmk/linux-arm.git drm-armada-fixes
|
||||||
F: drivers/gpu/drm/armada/
|
F: drivers/gpu/drm/armada/
|
||||||
F: include/uapi/drm/armada_drm.h
|
F: include/uapi/drm/armada_drm.h
|
||||||
F: Documentation/devicetree/bindings/display/armada/
|
F: Documentation/devicetree/bindings/display/armada/
|
||||||
|
@ -8179,6 +8184,15 @@ S: Maintained
|
||||||
F: drivers/tty/serial/atmel_serial.c
|
F: drivers/tty/serial/atmel_serial.c
|
||||||
F: include/linux/atmel_serial.h
|
F: include/linux/atmel_serial.h
|
||||||
|
|
||||||
|
MICROCHIP / ATMEL DMA DRIVER
|
||||||
|
M: Ludovic Desroches <ludovic.desroches@microchip.com>
|
||||||
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
|
L: dmaengine@vger.kernel.org
|
||||||
|
S: Supported
|
||||||
|
F: drivers/dma/at_hdmac.c
|
||||||
|
F: drivers/dma/at_hdmac_regs.h
|
||||||
|
F: include/linux/platform_data/dma-atmel.h
|
||||||
|
|
||||||
MICROCHIP / ATMEL ISC DRIVER
|
MICROCHIP / ATMEL ISC DRIVER
|
||||||
M: Songjun Wu <songjun.wu@microchip.com>
|
M: Songjun Wu <songjun.wu@microchip.com>
|
||||||
L: linux-media@vger.kernel.org
|
L: linux-media@vger.kernel.org
|
||||||
|
@ -8903,8 +8917,10 @@ S: Supported
|
||||||
F: drivers/nfc/nxp-nci
|
F: drivers/nfc/nxp-nci
|
||||||
|
|
||||||
NXP TDA998X DRM DRIVER
|
NXP TDA998X DRM DRIVER
|
||||||
M: Russell King <rmk+kernel@armlinux.org.uk>
|
M: Russell King <linux@armlinux.org.uk>
|
||||||
S: Supported
|
S: Supported
|
||||||
|
T: git git://git.armlinux.org.uk/~rmk/linux-arm.git drm-tda998x-devel
|
||||||
|
T: git git://git.armlinux.org.uk/~rmk/linux-arm.git drm-tda998x-fixes
|
||||||
F: drivers/gpu/drm/i2c/tda998x_drv.c
|
F: drivers/gpu/drm/i2c/tda998x_drv.c
|
||||||
F: include/drm/i2c/tda998x.h
|
F: include/drm/i2c/tda998x.h
|
||||||
|
|
||||||
|
@ -13085,6 +13101,7 @@ M: David Airlie <airlied@linux.ie>
|
||||||
M: Gerd Hoffmann <kraxel@redhat.com>
|
M: Gerd Hoffmann <kraxel@redhat.com>
|
||||||
L: dri-devel@lists.freedesktop.org
|
L: dri-devel@lists.freedesktop.org
|
||||||
L: virtualization@lists.linux-foundation.org
|
L: virtualization@lists.linux-foundation.org
|
||||||
|
T: git git://git.kraxel.org/linux drm-qemu
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/gpu/drm/virtio/
|
F: drivers/gpu/drm/virtio/
|
||||||
F: include/uapi/linux/virtio_gpu.h
|
F: include/uapi/linux/virtio_gpu.h
|
||||||
|
@ -13436,6 +13453,7 @@ F: arch/x86/
|
||||||
|
|
||||||
X86 PLATFORM DRIVERS
|
X86 PLATFORM DRIVERS
|
||||||
M: Darren Hart <dvhart@infradead.org>
|
M: Darren Hart <dvhart@infradead.org>
|
||||||
|
M: Andy Shevchenko <andy@infradead.org>
|
||||||
L: platform-driver-x86@vger.kernel.org
|
L: platform-driver-x86@vger.kernel.org
|
||||||
T: git git://git.infradead.org/users/dvhart/linux-platform-drivers-x86.git
|
T: git git://git.infradead.org/users/dvhart/linux-platform-drivers-x86.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
@ -13607,6 +13625,7 @@ F: drivers/net/hamradio/z8530.h
|
||||||
|
|
||||||
ZBUD COMPRESSED PAGE ALLOCATOR
|
ZBUD COMPRESSED PAGE ALLOCATOR
|
||||||
M: Seth Jennings <sjenning@redhat.com>
|
M: Seth Jennings <sjenning@redhat.com>
|
||||||
|
M: Dan Streetman <ddstreet@ieee.org>
|
||||||
L: linux-mm@kvack.org
|
L: linux-mm@kvack.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: mm/zbud.c
|
F: mm/zbud.c
|
||||||
|
@ -13662,6 +13681,7 @@ F: Documentation/vm/zsmalloc.txt
|
||||||
|
|
||||||
ZSWAP COMPRESSED SWAP CACHING
|
ZSWAP COMPRESSED SWAP CACHING
|
||||||
M: Seth Jennings <sjenning@redhat.com>
|
M: Seth Jennings <sjenning@redhat.com>
|
||||||
|
M: Dan Streetman <ddstreet@ieee.org>
|
||||||
L: linux-mm@kvack.org
|
L: linux-mm@kvack.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: mm/zswap.c
|
F: mm/zswap.c
|
||||||
|
|
4
Makefile
4
Makefile
|
@ -1,8 +1,8 @@
|
||||||
VERSION = 4
|
VERSION = 4
|
||||||
PATCHLEVEL = 10
|
PATCHLEVEL = 10
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc3
|
EXTRAVERSION = -rc5
|
||||||
NAME = Roaring Lionus
|
NAME = Anniversary Edition
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
# To see a list of typical targets execute "make help"
|
# To see a list of typical targets execute "make help"
|
||||||
|
|
|
@ -29,7 +29,7 @@ config ARC
|
||||||
select HAVE_KPROBES
|
select HAVE_KPROBES
|
||||||
select HAVE_KRETPROBES
|
select HAVE_KRETPROBES
|
||||||
select HAVE_MEMBLOCK
|
select HAVE_MEMBLOCK
|
||||||
select HAVE_MOD_ARCH_SPECIFIC if ARC_DW2_UNWIND
|
select HAVE_MOD_ARCH_SPECIFIC
|
||||||
select HAVE_OPROFILE
|
select HAVE_OPROFILE
|
||||||
select HAVE_PERF_EVENTS
|
select HAVE_PERF_EVENTS
|
||||||
select HANDLE_DOMAIN_IRQ
|
select HANDLE_DOMAIN_IRQ
|
||||||
|
|
|
@ -67,7 +67,7 @@ extern unsigned long perip_base, perip_end;
|
||||||
#define ARC_REG_IC_PTAG_HI 0x1F
|
#define ARC_REG_IC_PTAG_HI 0x1F
|
||||||
|
|
||||||
/* Bit val in IC_CTRL */
|
/* Bit val in IC_CTRL */
|
||||||
#define IC_CTRL_CACHE_DISABLE 0x1
|
#define IC_CTRL_DIS 0x1
|
||||||
|
|
||||||
/* Data cache related Auxiliary registers */
|
/* Data cache related Auxiliary registers */
|
||||||
#define ARC_REG_DC_BCR 0x72 /* Build Config reg */
|
#define ARC_REG_DC_BCR 0x72 /* Build Config reg */
|
||||||
|
@ -80,7 +80,8 @@ extern unsigned long perip_base, perip_end;
|
||||||
#define ARC_REG_DC_PTAG_HI 0x5F
|
#define ARC_REG_DC_PTAG_HI 0x5F
|
||||||
|
|
||||||
/* Bit val in DC_CTRL */
|
/* Bit val in DC_CTRL */
|
||||||
#define DC_CTRL_INV_MODE_FLUSH 0x40
|
#define DC_CTRL_DIS 0x001
|
||||||
|
#define DC_CTRL_INV_MODE_FLUSH 0x040
|
||||||
#define DC_CTRL_FLUSH_STATUS 0x100
|
#define DC_CTRL_FLUSH_STATUS 0x100
|
||||||
|
|
||||||
/*System-level cache (L2 cache) related Auxiliary registers */
|
/*System-level cache (L2 cache) related Auxiliary registers */
|
||||||
|
@ -92,8 +93,8 @@ extern unsigned long perip_base, perip_end;
|
||||||
#define ARC_REG_SLC_RGN_END 0x916
|
#define ARC_REG_SLC_RGN_END 0x916
|
||||||
|
|
||||||
/* Bit val in SLC_CONTROL */
|
/* Bit val in SLC_CONTROL */
|
||||||
|
#define SLC_CTRL_DIS 0x001
|
||||||
#define SLC_CTRL_IM 0x040
|
#define SLC_CTRL_IM 0x040
|
||||||
#define SLC_CTRL_DISABLE 0x001
|
|
||||||
#define SLC_CTRL_BUSY 0x100
|
#define SLC_CTRL_BUSY 0x100
|
||||||
#define SLC_CTRL_RGN_OP_INV 0x200
|
#define SLC_CTRL_RGN_OP_INV 0x200
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
;
|
;
|
||||||
; Now manually save: r12, sp, fp, gp, r25
|
; Now manually save: r12, sp, fp, gp, r25
|
||||||
|
|
||||||
|
PUSH r30
|
||||||
PUSH r12
|
PUSH r12
|
||||||
|
|
||||||
; Saving pt_regs->sp correctly requires some extra work due to the way
|
; Saving pt_regs->sp correctly requires some extra work due to the way
|
||||||
|
@ -72,6 +73,7 @@
|
||||||
POPAX AUX_USER_SP
|
POPAX AUX_USER_SP
|
||||||
1:
|
1:
|
||||||
POP r12
|
POP r12
|
||||||
|
POP r30
|
||||||
|
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
|
|
@ -14,13 +14,13 @@
|
||||||
|
|
||||||
#include <asm-generic/module.h>
|
#include <asm-generic/module.h>
|
||||||
|
|
||||||
#ifdef CONFIG_ARC_DW2_UNWIND
|
|
||||||
struct mod_arch_specific {
|
struct mod_arch_specific {
|
||||||
|
#ifdef CONFIG_ARC_DW2_UNWIND
|
||||||
void *unw_info;
|
void *unw_info;
|
||||||
int unw_sec_idx;
|
int unw_sec_idx;
|
||||||
|
#endif
|
||||||
const char *secstr;
|
const char *secstr;
|
||||||
};
|
};
|
||||||
#endif
|
|
||||||
|
|
||||||
#define MODULE_PROC_FAMILY "ARC700"
|
#define MODULE_PROC_FAMILY "ARC700"
|
||||||
|
|
||||||
|
|
|
@ -84,7 +84,7 @@ struct pt_regs {
|
||||||
unsigned long fp;
|
unsigned long fp;
|
||||||
unsigned long sp; /* user/kernel sp depending on where we came from */
|
unsigned long sp; /* user/kernel sp depending on where we came from */
|
||||||
|
|
||||||
unsigned long r12;
|
unsigned long r12, r30;
|
||||||
|
|
||||||
/*------- Below list auto saved by h/w -----------*/
|
/*------- Below list auto saved by h/w -----------*/
|
||||||
unsigned long r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11;
|
unsigned long r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11;
|
||||||
|
|
|
@ -31,6 +31,7 @@ extern int root_mountflags, end_mem;
|
||||||
|
|
||||||
void setup_processor(void);
|
void setup_processor(void);
|
||||||
void __init setup_arch_memory(void);
|
void __init setup_arch_memory(void);
|
||||||
|
long __init arc_get_mem_sz(void);
|
||||||
|
|
||||||
/* Helpers used in arc_*_mumbojumbo routines */
|
/* Helpers used in arc_*_mumbojumbo routines */
|
||||||
#define IS_AVAIL1(v, s) ((v) ? s : "")
|
#define IS_AVAIL1(v, s) ((v) ? s : "")
|
||||||
|
|
|
@ -77,20 +77,20 @@ void arc_init_IRQ(void)
|
||||||
|
|
||||||
static void arcv2_irq_mask(struct irq_data *data)
|
static void arcv2_irq_mask(struct irq_data *data)
|
||||||
{
|
{
|
||||||
write_aux_reg(AUX_IRQ_SELECT, data->irq);
|
write_aux_reg(AUX_IRQ_SELECT, data->hwirq);
|
||||||
write_aux_reg(AUX_IRQ_ENABLE, 0);
|
write_aux_reg(AUX_IRQ_ENABLE, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void arcv2_irq_unmask(struct irq_data *data)
|
static void arcv2_irq_unmask(struct irq_data *data)
|
||||||
{
|
{
|
||||||
write_aux_reg(AUX_IRQ_SELECT, data->irq);
|
write_aux_reg(AUX_IRQ_SELECT, data->hwirq);
|
||||||
write_aux_reg(AUX_IRQ_ENABLE, 1);
|
write_aux_reg(AUX_IRQ_ENABLE, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void arcv2_irq_enable(struct irq_data *data)
|
void arcv2_irq_enable(struct irq_data *data)
|
||||||
{
|
{
|
||||||
/* set default priority */
|
/* set default priority */
|
||||||
write_aux_reg(AUX_IRQ_SELECT, data->irq);
|
write_aux_reg(AUX_IRQ_SELECT, data->hwirq);
|
||||||
write_aux_reg(AUX_IRQ_PRIORITY, ARCV2_IRQ_DEF_PRIO);
|
write_aux_reg(AUX_IRQ_PRIORITY, ARCV2_IRQ_DEF_PRIO);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -57,7 +57,7 @@ static void arc_irq_mask(struct irq_data *data)
|
||||||
unsigned int ienb;
|
unsigned int ienb;
|
||||||
|
|
||||||
ienb = read_aux_reg(AUX_IENABLE);
|
ienb = read_aux_reg(AUX_IENABLE);
|
||||||
ienb &= ~(1 << data->irq);
|
ienb &= ~(1 << data->hwirq);
|
||||||
write_aux_reg(AUX_IENABLE, ienb);
|
write_aux_reg(AUX_IENABLE, ienb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,7 +66,7 @@ static void arc_irq_unmask(struct irq_data *data)
|
||||||
unsigned int ienb;
|
unsigned int ienb;
|
||||||
|
|
||||||
ienb = read_aux_reg(AUX_IENABLE);
|
ienb = read_aux_reg(AUX_IENABLE);
|
||||||
ienb |= (1 << data->irq);
|
ienb |= (1 << data->hwirq);
|
||||||
write_aux_reg(AUX_IENABLE, ienb);
|
write_aux_reg(AUX_IENABLE, ienb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
#include <linux/smp.h>
|
#include <linux/smp.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
|
#include <linux/irqchip/chained_irq.h>
|
||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
#include <soc/arc/mcip.h>
|
#include <soc/arc/mcip.h>
|
||||||
#include <asm/irqflags-arcv2.h>
|
#include <asm/irqflags-arcv2.h>
|
||||||
|
@ -221,10 +222,13 @@ static irq_hw_number_t idu_first_hwirq;
|
||||||
static void idu_cascade_isr(struct irq_desc *desc)
|
static void idu_cascade_isr(struct irq_desc *desc)
|
||||||
{
|
{
|
||||||
struct irq_domain *idu_domain = irq_desc_get_handler_data(desc);
|
struct irq_domain *idu_domain = irq_desc_get_handler_data(desc);
|
||||||
|
struct irq_chip *core_chip = irq_desc_get_chip(desc);
|
||||||
irq_hw_number_t core_hwirq = irqd_to_hwirq(irq_desc_get_irq_data(desc));
|
irq_hw_number_t core_hwirq = irqd_to_hwirq(irq_desc_get_irq_data(desc));
|
||||||
irq_hw_number_t idu_hwirq = core_hwirq - idu_first_hwirq;
|
irq_hw_number_t idu_hwirq = core_hwirq - idu_first_hwirq;
|
||||||
|
|
||||||
|
chained_irq_enter(core_chip, desc);
|
||||||
generic_handle_irq(irq_find_mapping(idu_domain, idu_hwirq));
|
generic_handle_irq(irq_find_mapping(idu_domain, idu_hwirq));
|
||||||
|
chained_irq_exit(core_chip, desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int idu_irq_map(struct irq_domain *d, unsigned int virq, irq_hw_number_t hwirq)
|
static int idu_irq_map(struct irq_domain *d, unsigned int virq, irq_hw_number_t hwirq)
|
||||||
|
|
|
@ -32,8 +32,8 @@ int module_frob_arch_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs,
|
||||||
#ifdef CONFIG_ARC_DW2_UNWIND
|
#ifdef CONFIG_ARC_DW2_UNWIND
|
||||||
mod->arch.unw_sec_idx = 0;
|
mod->arch.unw_sec_idx = 0;
|
||||||
mod->arch.unw_info = NULL;
|
mod->arch.unw_info = NULL;
|
||||||
mod->arch.secstr = secstr;
|
|
||||||
#endif
|
#endif
|
||||||
|
mod->arch.secstr = secstr;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,8 +113,10 @@ int apply_relocate_add(Elf32_Shdr *sechdrs,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_ARC_DW2_UNWIND
|
||||||
if (strcmp(module->arch.secstr+sechdrs[tgtsec].sh_name, ".eh_frame") == 0)
|
if (strcmp(module->arch.secstr+sechdrs[tgtsec].sh_name, ".eh_frame") == 0)
|
||||||
module->arch.unw_sec_idx = tgtsec;
|
module->arch.unw_sec_idx = tgtsec;
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
|
|
||||||
static int l2_line_sz;
|
static int l2_line_sz;
|
||||||
static int ioc_exists;
|
static int ioc_exists;
|
||||||
int slc_enable = 1, ioc_enable = 0;
|
int slc_enable = 1, ioc_enable = 1;
|
||||||
unsigned long perip_base = ARC_UNCACHED_ADDR_SPACE; /* legacy value for boot */
|
unsigned long perip_base = ARC_UNCACHED_ADDR_SPACE; /* legacy value for boot */
|
||||||
unsigned long perip_end = 0xFFFFFFFF; /* legacy value */
|
unsigned long perip_end = 0xFFFFFFFF; /* legacy value */
|
||||||
|
|
||||||
|
@ -271,7 +271,11 @@ void __cache_line_loop_v2(phys_addr_t paddr, unsigned long vaddr,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For ARC700 MMUv3 I-cache and D-cache flushes
|
* For ARC700 MMUv3 I-cache and D-cache flushes
|
||||||
* Also reused for HS38 aliasing I-cache configuration
|
* - ARC700 programming model requires paddr and vaddr be passed in seperate
|
||||||
|
* AUX registers (*_IV*L and *_PTAG respectively) irrespective of whether the
|
||||||
|
* caches actually alias or not.
|
||||||
|
* - For HS38, only the aliasing I-cache configuration uses the PTAG reg
|
||||||
|
* (non aliasing I-cache version doesn't; while D-cache can't possibly alias)
|
||||||
*/
|
*/
|
||||||
static inline
|
static inline
|
||||||
void __cache_line_loop_v3(phys_addr_t paddr, unsigned long vaddr,
|
void __cache_line_loop_v3(phys_addr_t paddr, unsigned long vaddr,
|
||||||
|
@ -458,6 +462,21 @@ static inline void __dc_entire_op(const int op)
|
||||||
__after_dc_op(op);
|
__after_dc_op(op);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void __dc_disable(void)
|
||||||
|
{
|
||||||
|
const int r = ARC_REG_DC_CTRL;
|
||||||
|
|
||||||
|
__dc_entire_op(OP_FLUSH_N_INV);
|
||||||
|
write_aux_reg(r, read_aux_reg(r) | DC_CTRL_DIS);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __dc_enable(void)
|
||||||
|
{
|
||||||
|
const int r = ARC_REG_DC_CTRL;
|
||||||
|
|
||||||
|
write_aux_reg(r, read_aux_reg(r) & ~DC_CTRL_DIS);
|
||||||
|
}
|
||||||
|
|
||||||
/* For kernel mappings cache operation: index is same as paddr */
|
/* For kernel mappings cache operation: index is same as paddr */
|
||||||
#define __dc_line_op_k(p, sz, op) __dc_line_op(p, p, sz, op)
|
#define __dc_line_op_k(p, sz, op) __dc_line_op(p, p, sz, op)
|
||||||
|
|
||||||
|
@ -483,6 +502,8 @@ static inline void __dc_line_op(phys_addr_t paddr, unsigned long vaddr,
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define __dc_entire_op(op)
|
#define __dc_entire_op(op)
|
||||||
|
#define __dc_disable()
|
||||||
|
#define __dc_enable()
|
||||||
#define __dc_line_op(paddr, vaddr, sz, op)
|
#define __dc_line_op(paddr, vaddr, sz, op)
|
||||||
#define __dc_line_op_k(paddr, sz, op)
|
#define __dc_line_op_k(paddr, sz, op)
|
||||||
|
|
||||||
|
@ -597,6 +618,40 @@ noinline void slc_op(phys_addr_t paddr, unsigned long sz, const int op)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
noinline static void slc_entire_op(const int op)
|
||||||
|
{
|
||||||
|
unsigned int ctrl, r = ARC_REG_SLC_CTRL;
|
||||||
|
|
||||||
|
ctrl = read_aux_reg(r);
|
||||||
|
|
||||||
|
if (!(op & OP_FLUSH)) /* i.e. OP_INV */
|
||||||
|
ctrl &= ~SLC_CTRL_IM; /* clear IM: Disable flush before Inv */
|
||||||
|
else
|
||||||
|
ctrl |= SLC_CTRL_IM;
|
||||||
|
|
||||||
|
write_aux_reg(r, ctrl);
|
||||||
|
|
||||||
|
write_aux_reg(ARC_REG_SLC_INVALIDATE, 1);
|
||||||
|
|
||||||
|
/* Important to wait for flush to complete */
|
||||||
|
while (read_aux_reg(r) & SLC_CTRL_BUSY);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void arc_slc_disable(void)
|
||||||
|
{
|
||||||
|
const int r = ARC_REG_SLC_CTRL;
|
||||||
|
|
||||||
|
slc_entire_op(OP_FLUSH_N_INV);
|
||||||
|
write_aux_reg(r, read_aux_reg(r) | SLC_CTRL_DIS);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void arc_slc_enable(void)
|
||||||
|
{
|
||||||
|
const int r = ARC_REG_SLC_CTRL;
|
||||||
|
|
||||||
|
write_aux_reg(r, read_aux_reg(r) & ~SLC_CTRL_DIS);
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************
|
/***********************************************************
|
||||||
* Exported APIs
|
* Exported APIs
|
||||||
*/
|
*/
|
||||||
|
@ -923,21 +978,54 @@ SYSCALL_DEFINE3(cacheflush, uint32_t, start, uint32_t, sz, uint32_t, flags)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void arc_cache_init(void)
|
/*
|
||||||
|
* IO-Coherency (IOC) setup rules:
|
||||||
|
*
|
||||||
|
* 1. Needs to be at system level, so only once by Master core
|
||||||
|
* Non-Masters need not be accessing caches at that time
|
||||||
|
* - They are either HALT_ON_RESET and kick started much later or
|
||||||
|
* - if run on reset, need to ensure that arc_platform_smp_wait_to_boot()
|
||||||
|
* doesn't perturb caches or coherency unit
|
||||||
|
*
|
||||||
|
* 2. caches (L1 and SLC) need to be purged (flush+inv) before setting up IOC,
|
||||||
|
* otherwise any straggler data might behave strangely post IOC enabling
|
||||||
|
*
|
||||||
|
* 3. All Caches need to be disabled when setting up IOC to elide any in-flight
|
||||||
|
* Coherency transactions
|
||||||
|
*/
|
||||||
|
noinline void __init arc_ioc_setup(void)
|
||||||
{
|
{
|
||||||
unsigned int __maybe_unused cpu = smp_processor_id();
|
unsigned int ap_sz;
|
||||||
char str[256];
|
|
||||||
|
|
||||||
printk(arc_cache_mumbojumbo(0, str, sizeof(str)));
|
/* Flush + invalidate + disable L1 dcache */
|
||||||
|
__dc_disable();
|
||||||
|
|
||||||
|
/* Flush + invalidate SLC */
|
||||||
|
if (read_aux_reg(ARC_REG_SLC_BCR))
|
||||||
|
slc_entire_op(OP_FLUSH_N_INV);
|
||||||
|
|
||||||
|
/* IOC Aperture start: TDB: handle non default CONFIG_LINUX_LINK_BASE */
|
||||||
|
write_aux_reg(ARC_REG_IO_COH_AP0_BASE, 0x80000);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Only master CPU needs to execute rest of function:
|
* IOC Aperture size:
|
||||||
* - Assume SMP so all cores will have same cache config so
|
* decoded as 2 ^ (SIZE + 2) KB: so setting 0x11 implies 512M
|
||||||
* any geomtry checks will be same for all
|
* TBD: fix for PGU + 1GB of low mem
|
||||||
* - IOC setup / dma callbacks only need to be setup once
|
* TBD: fix for PAE
|
||||||
*/
|
*/
|
||||||
if (cpu)
|
ap_sz = order_base_2(arc_get_mem_sz()/1024) - 2;
|
||||||
return;
|
write_aux_reg(ARC_REG_IO_COH_AP0_SIZE, ap_sz);
|
||||||
|
|
||||||
|
write_aux_reg(ARC_REG_IO_COH_PARTIAL, 1);
|
||||||
|
write_aux_reg(ARC_REG_IO_COH_ENABLE, 1);
|
||||||
|
|
||||||
|
/* Re-enable L1 dcache */
|
||||||
|
__dc_enable();
|
||||||
|
}
|
||||||
|
|
||||||
|
void __init arc_cache_init_master(void)
|
||||||
|
{
|
||||||
|
unsigned int __maybe_unused cpu = smp_processor_id();
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_ARC_HAS_ICACHE)) {
|
if (IS_ENABLED(CONFIG_ARC_HAS_ICACHE)) {
|
||||||
struct cpuinfo_arc_cache *ic = &cpuinfo_arc700[cpu].icache;
|
struct cpuinfo_arc_cache *ic = &cpuinfo_arc700[cpu].icache;
|
||||||
|
@ -985,30 +1073,14 @@ void arc_cache_init(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_isa_arcv2() && l2_line_sz && !slc_enable) {
|
/* Note that SLC disable not formally supported till HS 3.0 */
|
||||||
|
if (is_isa_arcv2() && l2_line_sz && !slc_enable)
|
||||||
|
arc_slc_disable();
|
||||||
|
|
||||||
/* IM set : flush before invalidate */
|
if (is_isa_arcv2() && ioc_enable)
|
||||||
write_aux_reg(ARC_REG_SLC_CTRL,
|
arc_ioc_setup();
|
||||||
read_aux_reg(ARC_REG_SLC_CTRL) | SLC_CTRL_IM);
|
|
||||||
|
|
||||||
write_aux_reg(ARC_REG_SLC_INVALIDATE, 1);
|
|
||||||
|
|
||||||
/* Important to wait for flush to complete */
|
|
||||||
while (read_aux_reg(ARC_REG_SLC_CTRL) & SLC_CTRL_BUSY);
|
|
||||||
write_aux_reg(ARC_REG_SLC_CTRL,
|
|
||||||
read_aux_reg(ARC_REG_SLC_CTRL) | SLC_CTRL_DISABLE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_isa_arcv2() && ioc_enable) {
|
if (is_isa_arcv2() && ioc_enable) {
|
||||||
/* IO coherency base - 0x8z */
|
|
||||||
write_aux_reg(ARC_REG_IO_COH_AP0_BASE, 0x80000);
|
|
||||||
/* IO coherency aperture size - 512Mb: 0x8z-0xAz */
|
|
||||||
write_aux_reg(ARC_REG_IO_COH_AP0_SIZE, 0x11);
|
|
||||||
/* Enable partial writes */
|
|
||||||
write_aux_reg(ARC_REG_IO_COH_PARTIAL, 1);
|
|
||||||
/* Enable IO coherency */
|
|
||||||
write_aux_reg(ARC_REG_IO_COH_ENABLE, 1);
|
|
||||||
|
|
||||||
__dma_cache_wback_inv = __dma_cache_wback_inv_ioc;
|
__dma_cache_wback_inv = __dma_cache_wback_inv_ioc;
|
||||||
__dma_cache_inv = __dma_cache_inv_ioc;
|
__dma_cache_inv = __dma_cache_inv_ioc;
|
||||||
__dma_cache_wback = __dma_cache_wback_ioc;
|
__dma_cache_wback = __dma_cache_wback_ioc;
|
||||||
|
@ -1022,3 +1094,20 @@ void arc_cache_init(void)
|
||||||
__dma_cache_wback = __dma_cache_wback_l1;
|
__dma_cache_wback = __dma_cache_wback_l1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void __ref arc_cache_init(void)
|
||||||
|
{
|
||||||
|
unsigned int __maybe_unused cpu = smp_processor_id();
|
||||||
|
char str[256];
|
||||||
|
|
||||||
|
printk(arc_cache_mumbojumbo(0, str, sizeof(str)));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Only master CPU needs to execute rest of function:
|
||||||
|
* - Assume SMP so all cores will have same cache config so
|
||||||
|
* any geomtry checks will be same for all
|
||||||
|
* - IOC setup / dma callbacks only need to be setup once
|
||||||
|
*/
|
||||||
|
if (!cpu)
|
||||||
|
arc_cache_init_master();
|
||||||
|
}
|
||||||
|
|
|
@ -40,6 +40,11 @@ struct pglist_data node_data[MAX_NUMNODES] __read_mostly;
|
||||||
EXPORT_SYMBOL(node_data);
|
EXPORT_SYMBOL(node_data);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
long __init arc_get_mem_sz(void)
|
||||||
|
{
|
||||||
|
return low_mem_sz;
|
||||||
|
}
|
||||||
|
|
||||||
/* User can over-ride above with "mem=nnn[KkMm]" in cmdline */
|
/* User can over-ride above with "mem=nnn[KkMm]" in cmdline */
|
||||||
static int __init setup_mem_sz(char *str)
|
static int __init setup_mem_sz(char *str)
|
||||||
{
|
{
|
||||||
|
|
|
@ -846,6 +846,7 @@ dtb-$(CONFIG_MACH_SUN8I) += \
|
||||||
sun8i-a83t-allwinner-h8homlet-v2.dtb \
|
sun8i-a83t-allwinner-h8homlet-v2.dtb \
|
||||||
sun8i-a83t-cubietruck-plus.dtb \
|
sun8i-a83t-cubietruck-plus.dtb \
|
||||||
sun8i-h3-bananapi-m2-plus.dtb \
|
sun8i-h3-bananapi-m2-plus.dtb \
|
||||||
|
sun8i-h3-nanopi-m1.dtb \
|
||||||
sun8i-h3-nanopi-neo.dtb \
|
sun8i-h3-nanopi-neo.dtb \
|
||||||
sun8i-h3-orangepi-2.dtb \
|
sun8i-h3-orangepi-2.dtb \
|
||||||
sun8i-h3-orangepi-lite.dtb \
|
sun8i-h3-orangepi-lite.dtb \
|
||||||
|
|
|
@ -170,7 +170,6 @@ AM33XX_IOPAD(0x8f8, PIN_INPUT_PULLUP | MUX_MODE0) /* (G15) mmc0_dat1.mmc0_dat1 *
|
||||||
AM33XX_IOPAD(0x8fc, PIN_INPUT_PULLUP | MUX_MODE0) /* (G16) mmc0_dat0.mmc0_dat0 */
|
AM33XX_IOPAD(0x8fc, PIN_INPUT_PULLUP | MUX_MODE0) /* (G16) mmc0_dat0.mmc0_dat0 */
|
||||||
AM33XX_IOPAD(0x900, PIN_INPUT_PULLUP | MUX_MODE0) /* (G17) mmc0_clk.mmc0_clk */
|
AM33XX_IOPAD(0x900, PIN_INPUT_PULLUP | MUX_MODE0) /* (G17) mmc0_clk.mmc0_clk */
|
||||||
AM33XX_IOPAD(0x904, PIN_INPUT_PULLUP | MUX_MODE0) /* (G18) mmc0_cmd.mmc0_cmd */
|
AM33XX_IOPAD(0x904, PIN_INPUT_PULLUP | MUX_MODE0) /* (G18) mmc0_cmd.mmc0_cmd */
|
||||||
AM33XX_IOPAD(0x960, PIN_INPUT_PULLUP | MUX_MODE5) /* (C15) spi0_cs1.mmc0_sdcd */
|
|
||||||
>;
|
>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -160,7 +160,7 @@ periph_clk: periph_clk {
|
||||||
|
|
||||||
axi {
|
axi {
|
||||||
compatible = "simple-bus";
|
compatible = "simple-bus";
|
||||||
ranges = <0x00000000 0x18000000 0x0011c40a>;
|
ranges = <0x00000000 0x18000000 0x0011c40c>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
|
|
@ -99,6 +99,7 @@ flash: m25p80@0 {
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
compatible = "m25p64";
|
compatible = "m25p64";
|
||||||
spi-max-frequency = <30000000>;
|
spi-max-frequency = <30000000>;
|
||||||
|
m25p,fast-read;
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
partition@0 {
|
partition@0 {
|
||||||
label = "U-Boot-SPL";
|
label = "U-Boot-SPL";
|
||||||
|
|
|
@ -1378,6 +1378,7 @@ sata: sata@4a141100 {
|
||||||
phy-names = "sata-phy";
|
phy-names = "sata-phy";
|
||||||
clocks = <&sata_ref_clk>;
|
clocks = <&sata_ref_clk>;
|
||||||
ti,hwmods = "sata";
|
ti,hwmods = "sata";
|
||||||
|
ports-implemented = <0x1>;
|
||||||
};
|
};
|
||||||
|
|
||||||
rtc: rtc@48838000 {
|
rtc: rtc@48838000 {
|
||||||
|
|
|
@ -75,6 +75,6 @@ dp83867_1: ethernet-phy@3 {
|
||||||
ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_25_NS>;
|
ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_25_NS>;
|
||||||
ti,tx-internal-delay = <DP83867_RGMIIDCTL_250_PS>;
|
ti,tx-internal-delay = <DP83867_RGMIIDCTL_250_PS>;
|
||||||
ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_8_B_NIB>;
|
ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_8_B_NIB>;
|
||||||
ti,min-output-imepdance;
|
ti,min-output-impedance;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -319,8 +319,6 @@ sound {
|
||||||
compatible = "fsl,imx6q-nitrogen6_max-sgtl5000",
|
compatible = "fsl,imx6q-nitrogen6_max-sgtl5000",
|
||||||
"fsl,imx-audio-sgtl5000";
|
"fsl,imx-audio-sgtl5000";
|
||||||
model = "imx6q-nitrogen6_max-sgtl5000";
|
model = "imx6q-nitrogen6_max-sgtl5000";
|
||||||
pinctrl-names = "default";
|
|
||||||
pinctrl-0 = <&pinctrl_sgtl5000>;
|
|
||||||
ssi-controller = <&ssi1>;
|
ssi-controller = <&ssi1>;
|
||||||
audio-codec = <&codec>;
|
audio-codec = <&codec>;
|
||||||
audio-routing =
|
audio-routing =
|
||||||
|
@ -402,6 +400,8 @@ &i2c1 {
|
||||||
|
|
||||||
codec: sgtl5000@0a {
|
codec: sgtl5000@0a {
|
||||||
compatible = "fsl,sgtl5000";
|
compatible = "fsl,sgtl5000";
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_sgtl5000>;
|
||||||
reg = <0x0a>;
|
reg = <0x0a>;
|
||||||
clocks = <&clks IMX6QDL_CLK_CKO>;
|
clocks = <&clks IMX6QDL_CLK_CKO>;
|
||||||
VDDA-supply = <®_2p5v>;
|
VDDA-supply = <®_2p5v>;
|
||||||
|
|
|
@ -250,8 +250,6 @@ sound {
|
||||||
compatible = "fsl,imx6q-nitrogen6_som2-sgtl5000",
|
compatible = "fsl,imx6q-nitrogen6_som2-sgtl5000",
|
||||||
"fsl,imx-audio-sgtl5000";
|
"fsl,imx-audio-sgtl5000";
|
||||||
model = "imx6q-nitrogen6_som2-sgtl5000";
|
model = "imx6q-nitrogen6_som2-sgtl5000";
|
||||||
pinctrl-names = "default";
|
|
||||||
pinctrl-0 = <&pinctrl_sgtl5000>;
|
|
||||||
ssi-controller = <&ssi1>;
|
ssi-controller = <&ssi1>;
|
||||||
audio-codec = <&codec>;
|
audio-codec = <&codec>;
|
||||||
audio-routing =
|
audio-routing =
|
||||||
|
@ -320,6 +318,8 @@ &i2c1 {
|
||||||
|
|
||||||
codec: sgtl5000@0a {
|
codec: sgtl5000@0a {
|
||||||
compatible = "fsl,sgtl5000";
|
compatible = "fsl,sgtl5000";
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_sgtl5000>;
|
||||||
reg = <0x0a>;
|
reg = <0x0a>;
|
||||||
clocks = <&clks IMX6QDL_CLK_CKO>;
|
clocks = <&clks IMX6QDL_CLK_CKO>;
|
||||||
VDDA-supply = <®_2p5v>;
|
VDDA-supply = <®_2p5v>;
|
||||||
|
|
|
@ -158,7 +158,7 @@ bl: backlight {
|
||||||
&mmc1 {
|
&mmc1 {
|
||||||
interrupts-extended = <&intc 83 &omap3_pmx_core 0x11a>;
|
interrupts-extended = <&intc 83 &omap3_pmx_core 0x11a>;
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
pinctrl-0 = <&mmc1_pins &mmc1_cd>;
|
pinctrl-0 = <&mmc1_pins>;
|
||||||
wp-gpios = <&gpio4 30 GPIO_ACTIVE_HIGH>; /* gpio_126 */
|
wp-gpios = <&gpio4 30 GPIO_ACTIVE_HIGH>; /* gpio_126 */
|
||||||
cd-gpios = <&gpio4 14 IRQ_TYPE_LEVEL_LOW>; /* gpio_110 */
|
cd-gpios = <&gpio4 14 IRQ_TYPE_LEVEL_LOW>; /* gpio_110 */
|
||||||
vmmc-supply = <&vmmc1>;
|
vmmc-supply = <&vmmc1>;
|
||||||
|
@ -193,7 +193,8 @@ OMAP3_CORE1_IOPAD(0x2148, PIN_INPUT | MUX_MODE0) /* sdmmc1_dat0.sdmmc1_dat0 */
|
||||||
OMAP3_CORE1_IOPAD(0x214a, PIN_INPUT | MUX_MODE0) /* sdmmc1_dat1.sdmmc1_dat1 */
|
OMAP3_CORE1_IOPAD(0x214a, PIN_INPUT | MUX_MODE0) /* sdmmc1_dat1.sdmmc1_dat1 */
|
||||||
OMAP3_CORE1_IOPAD(0x214c, PIN_INPUT | MUX_MODE0) /* sdmmc1_dat2.sdmmc1_dat2 */
|
OMAP3_CORE1_IOPAD(0x214c, PIN_INPUT | MUX_MODE0) /* sdmmc1_dat2.sdmmc1_dat2 */
|
||||||
OMAP3_CORE1_IOPAD(0x214e, PIN_INPUT | MUX_MODE0) /* sdmmc1_dat3.sdmmc1_dat3 */
|
OMAP3_CORE1_IOPAD(0x214e, PIN_INPUT | MUX_MODE0) /* sdmmc1_dat3.sdmmc1_dat3 */
|
||||||
OMAP3_CORE1_IOPAD(0x2132, PIN_INPUT_PULLUP | MUX_MODE4) /* cam_strobe.gpio_126 sdmmc1_wp*/
|
OMAP3_CORE1_IOPAD(0x2132, PIN_INPUT_PULLUP | MUX_MODE4) /* cam_strobe.gpio_126 */
|
||||||
|
OMAP3_CORE1_IOPAD(0x212c, PIN_INPUT_PULLUP | MUX_MODE4) /* cam_d11.gpio_110 */
|
||||||
>;
|
>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -242,12 +243,6 @@ backlight_pins: pinmux_backlight_pins {
|
||||||
OMAP3_WKUP_IOPAD(0x2a16, PIN_OUTPUT | PIN_OFF_OUTPUT_LOW | MUX_MODE4) /* sys_boot6.gpio_8 */
|
OMAP3_WKUP_IOPAD(0x2a16, PIN_OUTPUT | PIN_OFF_OUTPUT_LOW | MUX_MODE4) /* sys_boot6.gpio_8 */
|
||||||
>;
|
>;
|
||||||
};
|
};
|
||||||
|
|
||||||
mmc1_cd: pinmux_mmc1_cd {
|
|
||||||
pinctrl-single,pins = <
|
|
||||||
OMAP3_WKUP_IOPAD(0x212c, PIN_INPUT_PULLUP | MUX_MODE4) /* cam_d11.gpio_110 */
|
|
||||||
>;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -988,6 +988,7 @@ sata: sata@4a141100 {
|
||||||
phy-names = "sata-phy";
|
phy-names = "sata-phy";
|
||||||
clocks = <&sata_ref_clk>;
|
clocks = <&sata_ref_clk>;
|
||||||
ti,hwmods = "sata";
|
ti,hwmods = "sata";
|
||||||
|
ports-implemented = <0x1>;
|
||||||
};
|
};
|
||||||
|
|
||||||
dss: dss@58000000 {
|
dss: dss@58000000 {
|
||||||
|
|
|
@ -357,7 +357,7 @@ sdcc2bam: dma@12142000{
|
||||||
};
|
};
|
||||||
|
|
||||||
amba {
|
amba {
|
||||||
compatible = "arm,amba-bus";
|
compatible = "simple-bus";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges;
|
ranges;
|
||||||
|
|
|
@ -140,6 +140,10 @@ &cpu0 {
|
||||||
cpu-supply = <®_dcdc3>;
|
cpu-supply = <®_dcdc3>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&de {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
&ehci0 {
|
&ehci0 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
|
@ -234,6 +234,7 @@ gmac_tx_clk: clk@01c200d0 {
|
||||||
de: display-engine {
|
de: display-engine {
|
||||||
compatible = "allwinner,sun6i-a31-display-engine";
|
compatible = "allwinner,sun6i-a31-display-engine";
|
||||||
allwinner,pipelines = <&fe0>;
|
allwinner,pipelines = <&fe0>;
|
||||||
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
soc@01c00000 {
|
soc@01c00000 {
|
||||||
|
|
|
@ -56,7 +56,7 @@ mmc2_pwrseq: pwrseq {
|
||||||
};
|
};
|
||||||
|
|
||||||
&pio {
|
&pio {
|
||||||
mmc2_pins_nrst: mmc2@0 {
|
mmc2_pins_nrst: mmc2-rst-pin {
|
||||||
allwinner,pins = "PC16";
|
allwinner,pins = "PC16";
|
||||||
allwinner,function = "gpio_out";
|
allwinner,function = "gpio_out";
|
||||||
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
|
||||||
|
|
|
@ -471,7 +471,7 @@ CONFIG_MESON_WATCHDOG=y
|
||||||
CONFIG_DW_WATCHDOG=y
|
CONFIG_DW_WATCHDOG=y
|
||||||
CONFIG_DIGICOLOR_WATCHDOG=y
|
CONFIG_DIGICOLOR_WATCHDOG=y
|
||||||
CONFIG_BCM2835_WDT=y
|
CONFIG_BCM2835_WDT=y
|
||||||
CONFIG_BCM47XX_WATCHDOG=y
|
CONFIG_BCM47XX_WDT=y
|
||||||
CONFIG_BCM7038_WDT=m
|
CONFIG_BCM7038_WDT=m
|
||||||
CONFIG_BCM_KONA_WDT=y
|
CONFIG_BCM_KONA_WDT=y
|
||||||
CONFIG_MFD_ACT8945A=y
|
CONFIG_MFD_ACT8945A=y
|
||||||
|
@ -893,7 +893,7 @@ CONFIG_BCM2835_MBOX=y
|
||||||
CONFIG_RASPBERRYPI_FIRMWARE=y
|
CONFIG_RASPBERRYPI_FIRMWARE=y
|
||||||
CONFIG_EFI_VARS=m
|
CONFIG_EFI_VARS=m
|
||||||
CONFIG_EFI_CAPSULE_LOADER=m
|
CONFIG_EFI_CAPSULE_LOADER=m
|
||||||
CONFIG_CONFIG_BCM47XX_NVRAM=y
|
CONFIG_BCM47XX_NVRAM=y
|
||||||
CONFIG_BCM47XX_SPROM=y
|
CONFIG_BCM47XX_SPROM=y
|
||||||
CONFIG_EXT4_FS=y
|
CONFIG_EXT4_FS=y
|
||||||
CONFIG_AUTOFS4_FS=y
|
CONFIG_AUTOFS4_FS=y
|
||||||
|
|
|
@ -86,9 +86,9 @@ CONFIG_IPV6_TUNNEL=m
|
||||||
CONFIG_NETFILTER=y
|
CONFIG_NETFILTER=y
|
||||||
CONFIG_NF_CONNTRACK=m
|
CONFIG_NF_CONNTRACK=m
|
||||||
CONFIG_NF_CONNTRACK_EVENTS=y
|
CONFIG_NF_CONNTRACK_EVENTS=y
|
||||||
CONFIG_NF_CT_PROTO_DCCP=m
|
CONFIG_NF_CT_PROTO_DCCP=y
|
||||||
CONFIG_NF_CT_PROTO_SCTP=m
|
CONFIG_NF_CT_PROTO_SCTP=y
|
||||||
CONFIG_NF_CT_PROTO_UDPLITE=m
|
CONFIG_NF_CT_PROTO_UDPLITE=y
|
||||||
CONFIG_NF_CONNTRACK_AMANDA=m
|
CONFIG_NF_CONNTRACK_AMANDA=m
|
||||||
CONFIG_NF_CONNTRACK_FTP=m
|
CONFIG_NF_CONNTRACK_FTP=m
|
||||||
CONFIG_NF_CONNTRACK_H323=m
|
CONFIG_NF_CONNTRACK_H323=m
|
||||||
|
|
|
@ -94,6 +94,9 @@
|
||||||
#define ARM_CPU_XSCALE_ARCH_V2 0x4000
|
#define ARM_CPU_XSCALE_ARCH_V2 0x4000
|
||||||
#define ARM_CPU_XSCALE_ARCH_V3 0x6000
|
#define ARM_CPU_XSCALE_ARCH_V3 0x6000
|
||||||
|
|
||||||
|
/* Qualcomm implemented cores */
|
||||||
|
#define ARM_CPU_PART_SCORPION 0x510002d0
|
||||||
|
|
||||||
extern unsigned int processor_id;
|
extern unsigned int processor_id;
|
||||||
|
|
||||||
#ifdef CONFIG_CPU_CP15
|
#ifdef CONFIG_CPU_CP15
|
||||||
|
|
|
@ -54,6 +54,24 @@ static inline void *return_address(unsigned int level)
|
||||||
|
|
||||||
#define ftrace_return_address(n) return_address(n)
|
#define ftrace_return_address(n) return_address(n)
|
||||||
|
|
||||||
|
#define ARCH_HAS_SYSCALL_MATCH_SYM_NAME
|
||||||
|
|
||||||
|
static inline bool arch_syscall_match_sym_name(const char *sym,
|
||||||
|
const char *name)
|
||||||
|
{
|
||||||
|
if (!strcmp(sym, "sys_mmap2"))
|
||||||
|
sym = "sys_mmap_pgoff";
|
||||||
|
else if (!strcmp(sym, "sys_statfs64_wrapper"))
|
||||||
|
sym = "sys_statfs64";
|
||||||
|
else if (!strcmp(sym, "sys_fstatfs64_wrapper"))
|
||||||
|
sym = "sys_fstatfs64";
|
||||||
|
else if (!strcmp(sym, "sys_arm_fadvise64_64"))
|
||||||
|
sym = "sys_fadvise64_64";
|
||||||
|
|
||||||
|
/* Ignore case since sym may start with "SyS" instead of "sys" */
|
||||||
|
return !strcasecmp(sym, name);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* ifndef __ASSEMBLY__ */
|
#endif /* ifndef __ASSEMBLY__ */
|
||||||
|
|
||||||
#endif /* _ASM_ARM_FTRACE */
|
#endif /* _ASM_ARM_FTRACE */
|
||||||
|
|
|
@ -80,6 +80,11 @@ static inline bool is_kernel_in_hyp_mode(void)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool has_vhe(void)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/* The section containing the hypervisor idmap text */
|
/* The section containing the hypervisor idmap text */
|
||||||
extern char __hyp_idmap_text_start[];
|
extern char __hyp_idmap_text_start[];
|
||||||
extern char __hyp_idmap_text_end[];
|
extern char __hyp_idmap_text_end[];
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#ifndef _ASM_TYPES_H
|
#ifndef _UAPI_ASM_TYPES_H
|
||||||
#define _ASM_TYPES_H
|
#define _UAPI_ASM_TYPES_H
|
||||||
|
|
||||||
#include <asm-generic/int-ll64.h>
|
#include <asm-generic/int-ll64.h>
|
||||||
|
|
||||||
|
@ -37,4 +37,4 @@
|
||||||
#define __UINTPTR_TYPE__ unsigned long
|
#define __UINTPTR_TYPE__ unsigned long
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* _ASM_TYPES_H */
|
#endif /* _UAPI_ASM_TYPES_H */
|
|
@ -1063,6 +1063,22 @@ static int __init arch_hw_breakpoint_init(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Scorpion CPUs (at least those in APQ8060) seem to set DBGPRSR.SPD
|
||||||
|
* whenever a WFI is issued, even if the core is not powered down, in
|
||||||
|
* violation of the architecture. When DBGPRSR.SPD is set, accesses to
|
||||||
|
* breakpoint and watchpoint registers are treated as undefined, so
|
||||||
|
* this results in boot time and runtime failures when these are
|
||||||
|
* accessed and we unexpectedly take a trap.
|
||||||
|
*
|
||||||
|
* It's not clear if/how this can be worked around, so we blacklist
|
||||||
|
* Scorpion CPUs to avoid these issues.
|
||||||
|
*/
|
||||||
|
if (read_cpuid_part() == ARM_CPU_PART_SCORPION) {
|
||||||
|
pr_info("Scorpion CPU detected. Hardware breakpoints and watchpoints disabled\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
has_ossr = core_has_os_save_restore();
|
has_ossr = core_has_os_save_restore();
|
||||||
|
|
||||||
/* Determine how many BRPs/WRPs are available. */
|
/* Determine how many BRPs/WRPs are available. */
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
*/
|
*/
|
||||||
#include <linux/preempt.h>
|
#include <linux/preempt.h>
|
||||||
#include <linux/smp.h>
|
#include <linux/smp.h>
|
||||||
|
#include <linux/uaccess.h>
|
||||||
|
|
||||||
#include <asm/smp_plat.h>
|
#include <asm/smp_plat.h>
|
||||||
#include <asm/tlbflush.h>
|
#include <asm/tlbflush.h>
|
||||||
|
@ -40,8 +41,11 @@ static inline void ipi_flush_tlb_mm(void *arg)
|
||||||
static inline void ipi_flush_tlb_page(void *arg)
|
static inline void ipi_flush_tlb_page(void *arg)
|
||||||
{
|
{
|
||||||
struct tlb_args *ta = (struct tlb_args *)arg;
|
struct tlb_args *ta = (struct tlb_args *)arg;
|
||||||
|
unsigned int __ua_flags = uaccess_save_and_enable();
|
||||||
|
|
||||||
local_flush_tlb_page(ta->ta_vma, ta->ta_start);
|
local_flush_tlb_page(ta->ta_vma, ta->ta_start);
|
||||||
|
|
||||||
|
uaccess_restore(__ua_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void ipi_flush_tlb_kernel_page(void *arg)
|
static inline void ipi_flush_tlb_kernel_page(void *arg)
|
||||||
|
@ -54,8 +58,11 @@ static inline void ipi_flush_tlb_kernel_page(void *arg)
|
||||||
static inline void ipi_flush_tlb_range(void *arg)
|
static inline void ipi_flush_tlb_range(void *arg)
|
||||||
{
|
{
|
||||||
struct tlb_args *ta = (struct tlb_args *)arg;
|
struct tlb_args *ta = (struct tlb_args *)arg;
|
||||||
|
unsigned int __ua_flags = uaccess_save_and_enable();
|
||||||
|
|
||||||
local_flush_tlb_range(ta->ta_vma, ta->ta_start, ta->ta_end);
|
local_flush_tlb_range(ta->ta_vma, ta->ta_start, ta->ta_end);
|
||||||
|
|
||||||
|
uaccess_restore(__ua_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void ipi_flush_tlb_kernel_range(void *arg)
|
static inline void ipi_flush_tlb_kernel_range(void *arg)
|
||||||
|
|
|
@ -1099,6 +1099,9 @@ static void cpu_init_hyp_mode(void *dummy)
|
||||||
__cpu_init_hyp_mode(pgd_ptr, hyp_stack_ptr, vector_ptr);
|
__cpu_init_hyp_mode(pgd_ptr, hyp_stack_ptr, vector_ptr);
|
||||||
__cpu_init_stage2();
|
__cpu_init_stage2();
|
||||||
|
|
||||||
|
if (is_kernel_in_hyp_mode())
|
||||||
|
kvm_timer_init_vhe();
|
||||||
|
|
||||||
kvm_arm_init_debug();
|
kvm_arm_init_debug();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,6 @@
|
||||||
#include "soc.h"
|
#include "soc.h"
|
||||||
|
|
||||||
#define OMAP1_DMA_BASE (0xfffed800)
|
#define OMAP1_DMA_BASE (0xfffed800)
|
||||||
#define OMAP1_LOGICAL_DMA_CH_COUNT 17
|
|
||||||
|
|
||||||
static u32 enable_1510_mode;
|
static u32 enable_1510_mode;
|
||||||
|
|
||||||
|
@ -348,8 +347,6 @@ static int __init omap1_system_dma_init(void)
|
||||||
goto exit_iounmap;
|
goto exit_iounmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
d->lch_count = OMAP1_LOGICAL_DMA_CH_COUNT;
|
|
||||||
|
|
||||||
/* Valid attributes for omap1 plus processors */
|
/* Valid attributes for omap1 plus processors */
|
||||||
if (cpu_is_omap15xx())
|
if (cpu_is_omap15xx())
|
||||||
d->dev_caps = ENABLE_1510_MODE;
|
d->dev_caps = ENABLE_1510_MODE;
|
||||||
|
@ -366,13 +363,14 @@ static int __init omap1_system_dma_init(void)
|
||||||
d->dev_caps |= CLEAR_CSR_ON_READ;
|
d->dev_caps |= CLEAR_CSR_ON_READ;
|
||||||
d->dev_caps |= IS_WORD_16;
|
d->dev_caps |= IS_WORD_16;
|
||||||
|
|
||||||
if (cpu_is_omap15xx())
|
/* available logical channels */
|
||||||
d->chan_count = 9;
|
if (cpu_is_omap15xx()) {
|
||||||
else if (cpu_is_omap16xx() || cpu_is_omap7xx()) {
|
d->lch_count = 9;
|
||||||
if (!(d->dev_caps & ENABLE_1510_MODE))
|
} else {
|
||||||
d->chan_count = 16;
|
if (d->dev_caps & ENABLE_1510_MODE)
|
||||||
|
d->lch_count = 9;
|
||||||
else
|
else
|
||||||
d->chan_count = 9;
|
d->lch_count = 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
p = dma_plat_info;
|
p = dma_plat_info;
|
||||||
|
|
|
@ -161,7 +161,7 @@ static struct ti_st_plat_data wilink7_pdata = {
|
||||||
.nshutdown_gpio = 162,
|
.nshutdown_gpio = 162,
|
||||||
.dev_name = "/dev/ttyO1",
|
.dev_name = "/dev/ttyO1",
|
||||||
.flow_cntrl = 1,
|
.flow_cntrl = 1,
|
||||||
.baud_rate = 300000,
|
.baud_rate = 3000000,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct platform_device wl128x_device = {
|
static struct platform_device wl128x_device = {
|
||||||
|
|
|
@ -134,8 +134,8 @@ bool prcmu_pending_irq(void)
|
||||||
*/
|
*/
|
||||||
bool prcmu_is_cpu_in_wfi(int cpu)
|
bool prcmu_is_cpu_in_wfi(int cpu)
|
||||||
{
|
{
|
||||||
return readl(PRCM_ARM_WFI_STANDBY) & cpu ? PRCM_ARM_WFI_STANDBY_WFI1 :
|
return readl(PRCM_ARM_WFI_STANDBY) &
|
||||||
PRCM_ARM_WFI_STANDBY_WFI0;
|
(cpu ? PRCM_ARM_WFI_STANDBY_WFI1 : PRCM_ARM_WFI_STANDBY_WFI0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -137,6 +137,10 @@ emmc_pwrseq: emmc-pwrseq {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&scpi_clocks {
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
&uart_AO {
|
&uart_AO {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
pinctrl-0 = <&uart_ao_a_pins>;
|
pinctrl-0 = <&uart_ao_a_pins>;
|
||||||
|
|
|
@ -55,7 +55,7 @@ scpi {
|
||||||
mboxes = <&mailbox 1 &mailbox 2>;
|
mboxes = <&mailbox 1 &mailbox 2>;
|
||||||
shmem = <&cpu_scp_lpri &cpu_scp_hpri>;
|
shmem = <&cpu_scp_lpri &cpu_scp_hpri>;
|
||||||
|
|
||||||
clocks {
|
scpi_clocks: clocks {
|
||||||
compatible = "arm,scpi-clocks";
|
compatible = "arm,scpi-clocks";
|
||||||
|
|
||||||
scpi_dvfs: scpi_clocks@0 {
|
scpi_dvfs: scpi_clocks@0 {
|
||||||
|
|
|
@ -1367,7 +1367,7 @@ mshc_2: mshc@15560000 {
|
||||||
};
|
};
|
||||||
|
|
||||||
amba {
|
amba {
|
||||||
compatible = "arm,amba-bus";
|
compatible = "simple-bus";
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
ranges;
|
ranges;
|
||||||
|
|
|
@ -27,7 +27,7 @@ chosen {
|
||||||
stdout-path = "serial0:115200n8";
|
stdout-path = "serial0:115200n8";
|
||||||
};
|
};
|
||||||
|
|
||||||
memory {
|
memory@0 {
|
||||||
device_type = "memory";
|
device_type = "memory";
|
||||||
reg = <0x0 0x0 0x0 0x40000000>;
|
reg = <0x0 0x0 0x0 0x40000000>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -72,7 +72,7 @@ timer {
|
||||||
<1 10 0xf08>;
|
<1 10 0xf08>;
|
||||||
};
|
};
|
||||||
|
|
||||||
amba_apu {
|
amba_apu: amba_apu@0 {
|
||||||
compatible = "simple-bus";
|
compatible = "simple-bus";
|
||||||
#address-cells = <2>;
|
#address-cells = <2>;
|
||||||
#size-cells = <1>;
|
#size-cells = <1>;
|
||||||
|
@ -175,7 +175,7 @@ gpio: gpio@ff0a0000 {
|
||||||
};
|
};
|
||||||
|
|
||||||
i2c0: i2c@ff020000 {
|
i2c0: i2c@ff020000 {
|
||||||
compatible = "cdns,i2c-r1p10";
|
compatible = "cdns,i2c-r1p14", "cdns,i2c-r1p10";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
interrupt-parent = <&gic>;
|
interrupt-parent = <&gic>;
|
||||||
interrupts = <0 17 4>;
|
interrupts = <0 17 4>;
|
||||||
|
@ -185,7 +185,7 @@ i2c0: i2c@ff020000 {
|
||||||
};
|
};
|
||||||
|
|
||||||
i2c1: i2c@ff030000 {
|
i2c1: i2c@ff030000 {
|
||||||
compatible = "cdns,i2c-r1p10";
|
compatible = "cdns,i2c-r1p14", "cdns,i2c-r1p10";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
interrupt-parent = <&gic>;
|
interrupt-parent = <&gic>;
|
||||||
interrupts = <0 18 4>;
|
interrupts = <0 18 4>;
|
||||||
|
|
|
@ -164,22 +164,25 @@ lr .req x30 // link register
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Pseudo-ops for PC-relative adr/ldr/str <reg>, <symbol> where
|
* Pseudo-ops for PC-relative adr/ldr/str <reg>, <symbol> where
|
||||||
* <symbol> is within the range +/- 4 GB of the PC.
|
* <symbol> is within the range +/- 4 GB of the PC when running
|
||||||
|
* in core kernel context. In module context, a movz/movk sequence
|
||||||
|
* is used, since modules may be loaded far away from the kernel
|
||||||
|
* when KASLR is in effect.
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
* @dst: destination register (64 bit wide)
|
* @dst: destination register (64 bit wide)
|
||||||
* @sym: name of the symbol
|
* @sym: name of the symbol
|
||||||
* @tmp: optional scratch register to be used if <dst> == sp, which
|
|
||||||
* is not allowed in an adrp instruction
|
|
||||||
*/
|
*/
|
||||||
.macro adr_l, dst, sym, tmp=
|
.macro adr_l, dst, sym
|
||||||
.ifb \tmp
|
#ifndef MODULE
|
||||||
adrp \dst, \sym
|
adrp \dst, \sym
|
||||||
add \dst, \dst, :lo12:\sym
|
add \dst, \dst, :lo12:\sym
|
||||||
.else
|
#else
|
||||||
adrp \tmp, \sym
|
movz \dst, #:abs_g3:\sym
|
||||||
add \dst, \tmp, :lo12:\sym
|
movk \dst, #:abs_g2_nc:\sym
|
||||||
.endif
|
movk \dst, #:abs_g1_nc:\sym
|
||||||
|
movk \dst, #:abs_g0_nc:\sym
|
||||||
|
#endif
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -190,6 +193,7 @@ lr .req x30 // link register
|
||||||
* the address
|
* the address
|
||||||
*/
|
*/
|
||||||
.macro ldr_l, dst, sym, tmp=
|
.macro ldr_l, dst, sym, tmp=
|
||||||
|
#ifndef MODULE
|
||||||
.ifb \tmp
|
.ifb \tmp
|
||||||
adrp \dst, \sym
|
adrp \dst, \sym
|
||||||
ldr \dst, [\dst, :lo12:\sym]
|
ldr \dst, [\dst, :lo12:\sym]
|
||||||
|
@ -197,6 +201,15 @@ lr .req x30 // link register
|
||||||
adrp \tmp, \sym
|
adrp \tmp, \sym
|
||||||
ldr \dst, [\tmp, :lo12:\sym]
|
ldr \dst, [\tmp, :lo12:\sym]
|
||||||
.endif
|
.endif
|
||||||
|
#else
|
||||||
|
.ifb \tmp
|
||||||
|
adr_l \dst, \sym
|
||||||
|
ldr \dst, [\dst]
|
||||||
|
.else
|
||||||
|
adr_l \tmp, \sym
|
||||||
|
ldr \dst, [\tmp]
|
||||||
|
.endif
|
||||||
|
#endif
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -206,8 +219,13 @@ lr .req x30 // link register
|
||||||
* while <src> needs to be preserved.
|
* while <src> needs to be preserved.
|
||||||
*/
|
*/
|
||||||
.macro str_l, src, sym, tmp
|
.macro str_l, src, sym, tmp
|
||||||
|
#ifndef MODULE
|
||||||
adrp \tmp, \sym
|
adrp \tmp, \sym
|
||||||
str \src, [\tmp, :lo12:\sym]
|
str \src, [\tmp, :lo12:\sym]
|
||||||
|
#else
|
||||||
|
adr_l \tmp, \sym
|
||||||
|
str \src, [\tmp]
|
||||||
|
#endif
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -222,7 +222,7 @@ static inline void *phys_to_virt(phys_addr_t x)
|
||||||
#define _virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT)
|
#define _virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT)
|
||||||
#else
|
#else
|
||||||
#define __virt_to_pgoff(kaddr) (((u64)(kaddr) & ~PAGE_OFFSET) / PAGE_SIZE * sizeof(struct page))
|
#define __virt_to_pgoff(kaddr) (((u64)(kaddr) & ~PAGE_OFFSET) / PAGE_SIZE * sizeof(struct page))
|
||||||
#define __page_to_voff(page) (((u64)(page) & ~VMEMMAP_START) * PAGE_SIZE / sizeof(struct page))
|
#define __page_to_voff(kaddr) (((u64)(kaddr) & ~VMEMMAP_START) * PAGE_SIZE / sizeof(struct page))
|
||||||
|
|
||||||
#define page_to_virt(page) ((void *)((__page_to_voff(page)) | PAGE_OFFSET))
|
#define page_to_virt(page) ((void *)((__page_to_voff(page)) | PAGE_OFFSET))
|
||||||
#define virt_to_page(vaddr) ((struct page *)((__virt_to_pgoff(vaddr)) | VMEMMAP_START))
|
#define virt_to_page(vaddr) ((struct page *)((__virt_to_pgoff(vaddr)) | VMEMMAP_START))
|
||||||
|
|
|
@ -47,6 +47,7 @@
|
||||||
#include <asm/ptrace.h>
|
#include <asm/ptrace.h>
|
||||||
#include <asm/sections.h>
|
#include <asm/sections.h>
|
||||||
#include <asm/sysreg.h>
|
#include <asm/sysreg.h>
|
||||||
|
#include <asm/cpufeature.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* __boot_cpu_mode records what mode CPUs were booted in.
|
* __boot_cpu_mode records what mode CPUs were booted in.
|
||||||
|
@ -80,6 +81,14 @@ static inline bool is_kernel_in_hyp_mode(void)
|
||||||
return read_sysreg(CurrentEL) == CurrentEL_EL2;
|
return read_sysreg(CurrentEL) == CurrentEL_EL2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool has_vhe(void)
|
||||||
|
{
|
||||||
|
if (cpus_have_const_cap(ARM64_HAS_VIRT_HOST_EXTN))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_ARM64_VHE
|
#ifdef CONFIG_ARM64_VHE
|
||||||
extern void verify_cpu_run_el(void);
|
extern void verify_cpu_run_el(void);
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -77,6 +77,7 @@ struct user_fpsimd_state {
|
||||||
__uint128_t vregs[32];
|
__uint128_t vregs[32];
|
||||||
__u32 fpsr;
|
__u32 fpsr;
|
||||||
__u32 fpcr;
|
__u32 fpcr;
|
||||||
|
__u32 __reserved[2];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct user_hwdebug_state {
|
struct user_hwdebug_state {
|
||||||
|
|
|
@ -683,7 +683,7 @@ el0_inv:
|
||||||
mov x0, sp
|
mov x0, sp
|
||||||
mov x1, #BAD_SYNC
|
mov x1, #BAD_SYNC
|
||||||
mov x2, x25
|
mov x2, x25
|
||||||
bl bad_mode
|
bl bad_el0_sync
|
||||||
b ret_to_user
|
b ret_to_user
|
||||||
ENDPROC(el0_sync)
|
ENDPROC(el0_sync)
|
||||||
|
|
||||||
|
|
|
@ -551,6 +551,8 @@ static int hw_break_set(struct task_struct *target,
|
||||||
/* (address, ctrl) registers */
|
/* (address, ctrl) registers */
|
||||||
limit = regset->n * regset->size;
|
limit = regset->n * regset->size;
|
||||||
while (count && offset < limit) {
|
while (count && offset < limit) {
|
||||||
|
if (count < PTRACE_HBP_ADDR_SZ)
|
||||||
|
return -EINVAL;
|
||||||
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &addr,
|
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &addr,
|
||||||
offset, offset + PTRACE_HBP_ADDR_SZ);
|
offset, offset + PTRACE_HBP_ADDR_SZ);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@ -560,6 +562,8 @@ static int hw_break_set(struct task_struct *target,
|
||||||
return ret;
|
return ret;
|
||||||
offset += PTRACE_HBP_ADDR_SZ;
|
offset += PTRACE_HBP_ADDR_SZ;
|
||||||
|
|
||||||
|
if (!count)
|
||||||
|
break;
|
||||||
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &ctrl,
|
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &ctrl,
|
||||||
offset, offset + PTRACE_HBP_CTRL_SZ);
|
offset, offset + PTRACE_HBP_CTRL_SZ);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@ -596,7 +600,7 @@ static int gpr_set(struct task_struct *target, const struct user_regset *regset,
|
||||||
const void *kbuf, const void __user *ubuf)
|
const void *kbuf, const void __user *ubuf)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct user_pt_regs newregs;
|
struct user_pt_regs newregs = task_pt_regs(target)->user_regs;
|
||||||
|
|
||||||
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &newregs, 0, -1);
|
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &newregs, 0, -1);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@ -626,7 +630,8 @@ static int fpr_set(struct task_struct *target, const struct user_regset *regset,
|
||||||
const void *kbuf, const void __user *ubuf)
|
const void *kbuf, const void __user *ubuf)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct user_fpsimd_state newstate;
|
struct user_fpsimd_state newstate =
|
||||||
|
target->thread.fpsimd_state.user_fpsimd;
|
||||||
|
|
||||||
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &newstate, 0, -1);
|
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &newstate, 0, -1);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@ -650,7 +655,7 @@ static int tls_set(struct task_struct *target, const struct user_regset *regset,
|
||||||
const void *kbuf, const void __user *ubuf)
|
const void *kbuf, const void __user *ubuf)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
unsigned long tls;
|
unsigned long tls = target->thread.tp_value;
|
||||||
|
|
||||||
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &tls, 0, -1);
|
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &tls, 0, -1);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@ -676,7 +681,8 @@ static int system_call_set(struct task_struct *target,
|
||||||
unsigned int pos, unsigned int count,
|
unsigned int pos, unsigned int count,
|
||||||
const void *kbuf, const void __user *ubuf)
|
const void *kbuf, const void __user *ubuf)
|
||||||
{
|
{
|
||||||
int syscallno, ret;
|
int syscallno = task_pt_regs(target)->syscallno;
|
||||||
|
int ret;
|
||||||
|
|
||||||
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &syscallno, 0, -1);
|
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &syscallno, 0, -1);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@ -948,7 +954,7 @@ static int compat_tls_set(struct task_struct *target,
|
||||||
const void __user *ubuf)
|
const void __user *ubuf)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
compat_ulong_t tls;
|
compat_ulong_t tls = target->thread.tp_value;
|
||||||
|
|
||||||
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &tls, 0, -1);
|
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &tls, 0, -1);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
|
|
@ -604,17 +604,34 @@ const char *esr_get_class_string(u32 esr)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* bad_mode handles the impossible case in the exception vector.
|
* bad_mode handles the impossible case in the exception vector. This is always
|
||||||
|
* fatal.
|
||||||
*/
|
*/
|
||||||
asmlinkage void bad_mode(struct pt_regs *regs, int reason, unsigned int esr)
|
asmlinkage void bad_mode(struct pt_regs *regs, int reason, unsigned int esr)
|
||||||
{
|
{
|
||||||
siginfo_t info;
|
|
||||||
void __user *pc = (void __user *)instruction_pointer(regs);
|
|
||||||
console_verbose();
|
console_verbose();
|
||||||
|
|
||||||
pr_crit("Bad mode in %s handler detected on CPU%d, code 0x%08x -- %s\n",
|
pr_crit("Bad mode in %s handler detected on CPU%d, code 0x%08x -- %s\n",
|
||||||
handler[reason], smp_processor_id(), esr,
|
handler[reason], smp_processor_id(), esr,
|
||||||
esr_get_class_string(esr));
|
esr_get_class_string(esr));
|
||||||
|
|
||||||
|
die("Oops - bad mode", regs, 0);
|
||||||
|
local_irq_disable();
|
||||||
|
panic("bad mode");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* bad_el0_sync handles unexpected, but potentially recoverable synchronous
|
||||||
|
* exceptions taken from EL0. Unlike bad_mode, this returns.
|
||||||
|
*/
|
||||||
|
asmlinkage void bad_el0_sync(struct pt_regs *regs, int reason, unsigned int esr)
|
||||||
|
{
|
||||||
|
siginfo_t info;
|
||||||
|
void __user *pc = (void __user *)instruction_pointer(regs);
|
||||||
|
console_verbose();
|
||||||
|
|
||||||
|
pr_crit("Bad EL0 synchronous exception detected on CPU%d, code 0x%08x -- %s\n",
|
||||||
|
smp_processor_id(), esr, esr_get_class_string(esr));
|
||||||
__show_regs(regs);
|
__show_regs(regs);
|
||||||
|
|
||||||
info.si_signo = SIGILL;
|
info.si_signo = SIGILL;
|
||||||
|
@ -622,7 +639,10 @@ asmlinkage void bad_mode(struct pt_regs *regs, int reason, unsigned int esr)
|
||||||
info.si_code = ILL_ILLOPC;
|
info.si_code = ILL_ILLOPC;
|
||||||
info.si_addr = pc;
|
info.si_addr = pc;
|
||||||
|
|
||||||
arm64_notify_die("Oops - bad mode", regs, &info, 0);
|
current->thread.fault_address = 0;
|
||||||
|
current->thread.fault_code = 0;
|
||||||
|
|
||||||
|
force_sig_info(info.si_signo, &info, current);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __pte_error(const char *file, int line, unsigned long val)
|
void __pte_error(const char *file, int line, unsigned long val)
|
||||||
|
|
|
@ -239,7 +239,7 @@ int huge_ptep_set_access_flags(struct vm_area_struct *vma,
|
||||||
ncontig = find_num_contig(vma->vm_mm, addr, cpte,
|
ncontig = find_num_contig(vma->vm_mm, addr, cpte,
|
||||||
*cpte, &pgsize);
|
*cpte, &pgsize);
|
||||||
for (i = 0; i < ncontig; ++i, ++cpte, addr += pgsize) {
|
for (i = 0; i < ncontig; ++i, ++cpte, addr += pgsize) {
|
||||||
changed = ptep_set_access_flags(vma, addr, cpte,
|
changed |= ptep_set_access_flags(vma, addr, cpte,
|
||||||
pfn_pte(pfn,
|
pfn_pte(pfn,
|
||||||
hugeprot),
|
hugeprot),
|
||||||
dirty);
|
dirty);
|
||||||
|
|
|
@ -404,6 +404,8 @@ void __init mem_init(void)
|
||||||
if (swiotlb_force == SWIOTLB_FORCE ||
|
if (swiotlb_force == SWIOTLB_FORCE ||
|
||||||
max_pfn > (arm64_dma_phys_limit >> PAGE_SHIFT))
|
max_pfn > (arm64_dma_phys_limit >> PAGE_SHIFT))
|
||||||
swiotlb_init(1);
|
swiotlb_init(1);
|
||||||
|
else
|
||||||
|
swiotlb_force = SWIOTLB_NO_FORCE;
|
||||||
|
|
||||||
set_max_mapnr(pfn_to_page(max_pfn) - mem_map);
|
set_max_mapnr(pfn_to_page(max_pfn) - mem_map);
|
||||||
|
|
||||||
|
|
|
@ -139,7 +139,7 @@ static inline void atomic64_dec(atomic64_t *v)
|
||||||
#define atomic64_sub_and_test(i,v) (atomic64_sub_return((i), (v)) == 0)
|
#define atomic64_sub_and_test(i,v) (atomic64_sub_return((i), (v)) == 0)
|
||||||
#define atomic64_dec_and_test(v) (atomic64_dec_return((v)) == 0)
|
#define atomic64_dec_and_test(v) (atomic64_dec_return((v)) == 0)
|
||||||
#define atomic64_inc_and_test(v) (atomic64_inc_return((v)) == 0)
|
#define atomic64_inc_and_test(v) (atomic64_inc_return((v)) == 0)
|
||||||
|
#define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0)
|
||||||
|
|
||||||
#define atomic_cmpxchg(v, old, new) (cmpxchg(&(v)->counter, old, new))
|
#define atomic_cmpxchg(v, old, new) (cmpxchg(&(v)->counter, old, new))
|
||||||
#define atomic_xchg(v, new) (xchg(&(v)->counter, new))
|
#define atomic_xchg(v, new) (xchg(&(v)->counter, new))
|
||||||
|
@ -161,6 +161,39 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u)
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int atomic64_add_unless(atomic64_t *v, long long i, long long u)
|
||||||
|
{
|
||||||
|
long long c, old;
|
||||||
|
|
||||||
|
c = atomic64_read(v);
|
||||||
|
for (;;) {
|
||||||
|
if (unlikely(c == u))
|
||||||
|
break;
|
||||||
|
old = atomic64_cmpxchg(v, c, c + i);
|
||||||
|
if (likely(old == c))
|
||||||
|
break;
|
||||||
|
c = old;
|
||||||
|
}
|
||||||
|
return c != u;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline long long atomic64_dec_if_positive(atomic64_t *v)
|
||||||
|
{
|
||||||
|
long long c, old, dec;
|
||||||
|
|
||||||
|
c = atomic64_read(v);
|
||||||
|
for (;;) {
|
||||||
|
dec = c - 1;
|
||||||
|
if (unlikely(dec < 0))
|
||||||
|
break;
|
||||||
|
old = atomic64_cmpxchg((v), c, dec);
|
||||||
|
if (likely(old == c))
|
||||||
|
break;
|
||||||
|
c = old;
|
||||||
|
}
|
||||||
|
return dec;
|
||||||
|
}
|
||||||
|
|
||||||
#define ATOMIC_OP(op) \
|
#define ATOMIC_OP(op) \
|
||||||
static inline int atomic_fetch_##op(int i, atomic_t *v) \
|
static inline int atomic_fetch_##op(int i, atomic_t *v) \
|
||||||
{ \
|
{ \
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
struct task_struct;
|
struct task_struct;
|
||||||
struct thread_struct;
|
struct thread_struct;
|
||||||
|
|
||||||
#if !defined(CONFIG_LAZY_SAVE_FPU)
|
#if defined(CONFIG_FPU) && !defined(CONFIG_LAZY_SAVE_FPU)
|
||||||
struct fpu_state_struct;
|
struct fpu_state_struct;
|
||||||
extern asmlinkage void fpu_save(struct fpu_state_struct *);
|
extern asmlinkage void fpu_save(struct fpu_state_struct *);
|
||||||
#define switch_fpu(prev, next) \
|
#define switch_fpu(prev, next) \
|
||||||
|
|
|
@ -36,12 +36,13 @@
|
||||||
#ifdef CONFIG_HUGETLB_PAGE
|
#ifdef CONFIG_HUGETLB_PAGE
|
||||||
static inline int hash__hugepd_ok(hugepd_t hpd)
|
static inline int hash__hugepd_ok(hugepd_t hpd)
|
||||||
{
|
{
|
||||||
|
unsigned long hpdval = hpd_val(hpd);
|
||||||
/*
|
/*
|
||||||
* if it is not a pte and have hugepd shift mask
|
* if it is not a pte and have hugepd shift mask
|
||||||
* set, then it is a hugepd directory pointer
|
* set, then it is a hugepd directory pointer
|
||||||
*/
|
*/
|
||||||
if (!(hpd.pd & _PAGE_PTE) &&
|
if (!(hpdval & _PAGE_PTE) &&
|
||||||
((hpd.pd & HUGEPD_SHIFT_MASK) != 0))
|
((hpdval & HUGEPD_SHIFT_MASK) != 0))
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -201,6 +201,10 @@ extern int __meminit hash__vmemmap_create_mapping(unsigned long start,
|
||||||
unsigned long phys);
|
unsigned long phys);
|
||||||
extern void hash__vmemmap_remove_mapping(unsigned long start,
|
extern void hash__vmemmap_remove_mapping(unsigned long start,
|
||||||
unsigned long page_size);
|
unsigned long page_size);
|
||||||
|
|
||||||
|
int hash__create_section_mapping(unsigned long start, unsigned long end);
|
||||||
|
int hash__remove_section_mapping(unsigned long start, unsigned long end);
|
||||||
|
|
||||||
#endif /* !__ASSEMBLY__ */
|
#endif /* !__ASSEMBLY__ */
|
||||||
#endif /* __KERNEL__ */
|
#endif /* __KERNEL__ */
|
||||||
#endif /* _ASM_POWERPC_BOOK3S_64_HASH_H */
|
#endif /* _ASM_POWERPC_BOOK3S_64_HASH_H */
|
||||||
|
|
|
@ -21,12 +21,12 @@ static inline pte_t *hugepd_page(hugepd_t hpd)
|
||||||
* We have only four bits to encode, MMU page size
|
* We have only four bits to encode, MMU page size
|
||||||
*/
|
*/
|
||||||
BUILD_BUG_ON((MMU_PAGE_COUNT - 1) > 0xf);
|
BUILD_BUG_ON((MMU_PAGE_COUNT - 1) > 0xf);
|
||||||
return __va(hpd.pd & HUGEPD_ADDR_MASK);
|
return __va(hpd_val(hpd) & HUGEPD_ADDR_MASK);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline unsigned int hugepd_mmu_psize(hugepd_t hpd)
|
static inline unsigned int hugepd_mmu_psize(hugepd_t hpd)
|
||||||
{
|
{
|
||||||
return (hpd.pd & HUGEPD_SHIFT_MASK) >> 2;
|
return (hpd_val(hpd) & HUGEPD_SHIFT_MASK) >> 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline unsigned int hugepd_shift(hugepd_t hpd)
|
static inline unsigned int hugepd_shift(hugepd_t hpd)
|
||||||
|
@ -52,18 +52,20 @@ static inline pte_t *hugepd_page(hugepd_t hpd)
|
||||||
{
|
{
|
||||||
BUG_ON(!hugepd_ok(hpd));
|
BUG_ON(!hugepd_ok(hpd));
|
||||||
#ifdef CONFIG_PPC_8xx
|
#ifdef CONFIG_PPC_8xx
|
||||||
return (pte_t *)__va(hpd.pd & ~(_PMD_PAGE_MASK | _PMD_PRESENT_MASK));
|
return (pte_t *)__va(hpd_val(hpd) &
|
||||||
|
~(_PMD_PAGE_MASK | _PMD_PRESENT_MASK));
|
||||||
#else
|
#else
|
||||||
return (pte_t *)((hpd.pd & ~HUGEPD_SHIFT_MASK) | PD_HUGE);
|
return (pte_t *)((hpd_val(hpd) &
|
||||||
|
~HUGEPD_SHIFT_MASK) | PD_HUGE);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline unsigned int hugepd_shift(hugepd_t hpd)
|
static inline unsigned int hugepd_shift(hugepd_t hpd)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_PPC_8xx
|
#ifdef CONFIG_PPC_8xx
|
||||||
return ((hpd.pd & _PMD_PAGE_MASK) >> 1) + 17;
|
return ((hpd_val(hpd) & _PMD_PAGE_MASK) >> 1) + 17;
|
||||||
#else
|
#else
|
||||||
return hpd.pd & HUGEPD_SHIFT_MASK;
|
return hpd_val(hpd) & HUGEPD_SHIFT_MASK;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -227,9 +227,10 @@ extern pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
|
||||||
static inline int hugepd_ok(hugepd_t hpd)
|
static inline int hugepd_ok(hugepd_t hpd)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_PPC_8xx
|
#ifdef CONFIG_PPC_8xx
|
||||||
return ((hpd.pd & 0x4) != 0);
|
return ((hpd_val(hpd) & 0x4) != 0);
|
||||||
#else
|
#else
|
||||||
return (hpd.pd > 0);
|
/* We clear the top bit to indicate hugepd */
|
||||||
|
return ((hpd_val(hpd) & PD_HUGE) == 0);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -294,15 +294,12 @@ extern long long virt_phys_offset;
|
||||||
#include <asm/pgtable-types.h>
|
#include <asm/pgtable-types.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef struct { signed long pd; } hugepd_t;
|
|
||||||
|
|
||||||
#ifndef CONFIG_HUGETLB_PAGE
|
#ifndef CONFIG_HUGETLB_PAGE
|
||||||
#define is_hugepd(pdep) (0)
|
#define is_hugepd(pdep) (0)
|
||||||
#define pgd_huge(pgd) (0)
|
#define pgd_huge(pgd) (0)
|
||||||
#endif /* CONFIG_HUGETLB_PAGE */
|
#endif /* CONFIG_HUGETLB_PAGE */
|
||||||
|
|
||||||
#define __hugepd(x) ((hugepd_t) { (x) })
|
|
||||||
|
|
||||||
struct page;
|
struct page;
|
||||||
extern void clear_user_page(void *page, unsigned long vaddr, struct page *pg);
|
extern void clear_user_page(void *page, unsigned long vaddr, struct page *pg);
|
||||||
extern void copy_user_page(void *to, void *from, unsigned long vaddr,
|
extern void copy_user_page(void *to, void *from, unsigned long vaddr,
|
||||||
|
|
|
@ -65,6 +65,7 @@ struct power_pmu {
|
||||||
#define PPMU_HAS_SSLOT 0x00000020 /* Has sampled slot in MMCRA */
|
#define PPMU_HAS_SSLOT 0x00000020 /* Has sampled slot in MMCRA */
|
||||||
#define PPMU_HAS_SIER 0x00000040 /* Has SIER */
|
#define PPMU_HAS_SIER 0x00000040 /* Has SIER */
|
||||||
#define PPMU_ARCH_207S 0x00000080 /* PMC is architecture v2.07S */
|
#define PPMU_ARCH_207S 0x00000080 /* PMC is architecture v2.07S */
|
||||||
|
#define PPMU_NO_SIAR 0x00000100 /* Do not use SIAR */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Values for flags to get_alternatives()
|
* Values for flags to get_alternatives()
|
||||||
|
|
|
@ -104,4 +104,12 @@ static inline bool pmd_xchg(pmd_t *pmdp, pmd_t old, pmd_t new)
|
||||||
return pmd_raw(old) == prev;
|
return pmd_raw(old) == prev;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef struct { __be64 pdbe; } hugepd_t;
|
||||||
|
#define __hugepd(x) ((hugepd_t) { cpu_to_be64(x) })
|
||||||
|
|
||||||
|
static inline unsigned long hpd_val(hugepd_t x)
|
||||||
|
{
|
||||||
|
return be64_to_cpu(x.pdbe);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* _ASM_POWERPC_PGTABLE_BE_TYPES_H */
|
#endif /* _ASM_POWERPC_PGTABLE_BE_TYPES_H */
|
||||||
|
|
|
@ -66,4 +66,11 @@ static inline bool pte_xchg(pte_t *ptep, pte_t old, pte_t new)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
typedef struct { unsigned long pd; } hugepd_t;
|
||||||
|
#define __hugepd(x) ((hugepd_t) { (x) })
|
||||||
|
static inline unsigned long hpd_val(hugepd_t x)
|
||||||
|
{
|
||||||
|
return x.pd;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* _ASM_POWERPC_PGTABLE_TYPES_H */
|
#endif /* _ASM_POWERPC_PGTABLE_TYPES_H */
|
||||||
|
|
|
@ -157,7 +157,7 @@
|
||||||
#define PPC_INST_MCRXR 0x7c000400
|
#define PPC_INST_MCRXR 0x7c000400
|
||||||
#define PPC_INST_MCRXR_MASK 0xfc0007fe
|
#define PPC_INST_MCRXR_MASK 0xfc0007fe
|
||||||
#define PPC_INST_MFSPR_PVR 0x7c1f42a6
|
#define PPC_INST_MFSPR_PVR 0x7c1f42a6
|
||||||
#define PPC_INST_MFSPR_PVR_MASK 0xfc1fffff
|
#define PPC_INST_MFSPR_PVR_MASK 0xfc1ffffe
|
||||||
#define PPC_INST_MFTMR 0x7c0002dc
|
#define PPC_INST_MFTMR 0x7c0002dc
|
||||||
#define PPC_INST_MSGSND 0x7c00019c
|
#define PPC_INST_MSGSND 0x7c00019c
|
||||||
#define PPC_INST_MSGCLR 0x7c0001dc
|
#define PPC_INST_MSGCLR 0x7c0001dc
|
||||||
|
@ -174,13 +174,13 @@
|
||||||
#define PPC_INST_RFDI 0x4c00004e
|
#define PPC_INST_RFDI 0x4c00004e
|
||||||
#define PPC_INST_RFMCI 0x4c00004c
|
#define PPC_INST_RFMCI 0x4c00004c
|
||||||
#define PPC_INST_MFSPR_DSCR 0x7c1102a6
|
#define PPC_INST_MFSPR_DSCR 0x7c1102a6
|
||||||
#define PPC_INST_MFSPR_DSCR_MASK 0xfc1fffff
|
#define PPC_INST_MFSPR_DSCR_MASK 0xfc1ffffe
|
||||||
#define PPC_INST_MTSPR_DSCR 0x7c1103a6
|
#define PPC_INST_MTSPR_DSCR 0x7c1103a6
|
||||||
#define PPC_INST_MTSPR_DSCR_MASK 0xfc1fffff
|
#define PPC_INST_MTSPR_DSCR_MASK 0xfc1ffffe
|
||||||
#define PPC_INST_MFSPR_DSCR_USER 0x7c0302a6
|
#define PPC_INST_MFSPR_DSCR_USER 0x7c0302a6
|
||||||
#define PPC_INST_MFSPR_DSCR_USER_MASK 0xfc1fffff
|
#define PPC_INST_MFSPR_DSCR_USER_MASK 0xfc1ffffe
|
||||||
#define PPC_INST_MTSPR_DSCR_USER 0x7c0303a6
|
#define PPC_INST_MTSPR_DSCR_USER 0x7c0303a6
|
||||||
#define PPC_INST_MTSPR_DSCR_USER_MASK 0xfc1fffff
|
#define PPC_INST_MTSPR_DSCR_USER_MASK 0xfc1ffffe
|
||||||
#define PPC_INST_MFVSRD 0x7c000066
|
#define PPC_INST_MFVSRD 0x7c000066
|
||||||
#define PPC_INST_MTVSRD 0x7c000166
|
#define PPC_INST_MTVSRD 0x7c000166
|
||||||
#define PPC_INST_SLBFEE 0x7c0007a7
|
#define PPC_INST_SLBFEE 0x7c0007a7
|
||||||
|
|
|
@ -298,9 +298,17 @@ void eeh_slot_error_detail(struct eeh_pe *pe, int severity)
|
||||||
*
|
*
|
||||||
* For pHyp, we have to enable IO for log retrieval. Otherwise,
|
* For pHyp, we have to enable IO for log retrieval. Otherwise,
|
||||||
* 0xFF's is always returned from PCI config space.
|
* 0xFF's is always returned from PCI config space.
|
||||||
|
*
|
||||||
|
* When the @severity is EEH_LOG_PERM, the PE is going to be
|
||||||
|
* removed. Prior to that, the drivers for devices included in
|
||||||
|
* the PE will be closed. The drivers rely on working IO path
|
||||||
|
* to bring the devices to quiet state. Otherwise, PCI traffic
|
||||||
|
* from those devices after they are removed is like to cause
|
||||||
|
* another unexpected EEH error.
|
||||||
*/
|
*/
|
||||||
if (!(pe->type & EEH_PE_PHB)) {
|
if (!(pe->type & EEH_PE_PHB)) {
|
||||||
if (eeh_has_flag(EEH_ENABLE_IO_FOR_LOG))
|
if (eeh_has_flag(EEH_ENABLE_IO_FOR_LOG) ||
|
||||||
|
severity == EEH_LOG_PERM)
|
||||||
eeh_pci_enable(pe, EEH_OPT_THAW_MMIO);
|
eeh_pci_enable(pe, EEH_OPT_THAW_MMIO);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -463,6 +463,10 @@ static int fpr_set(struct task_struct *target, const struct user_regset *regset,
|
||||||
|
|
||||||
flush_fp_to_thread(target);
|
flush_fp_to_thread(target);
|
||||||
|
|
||||||
|
for (i = 0; i < 32 ; i++)
|
||||||
|
buf[i] = target->thread.TS_FPR(i);
|
||||||
|
buf[32] = target->thread.fp_state.fpscr;
|
||||||
|
|
||||||
/* copy to local buffer then write that out */
|
/* copy to local buffer then write that out */
|
||||||
i = user_regset_copyin(&pos, &count, &kbuf, &ubuf, buf, 0, -1);
|
i = user_regset_copyin(&pos, &count, &kbuf, &ubuf, buf, 0, -1);
|
||||||
if (i)
|
if (i)
|
||||||
|
@ -672,6 +676,9 @@ static int vsr_set(struct task_struct *target, const struct user_regset *regset,
|
||||||
flush_altivec_to_thread(target);
|
flush_altivec_to_thread(target);
|
||||||
flush_vsx_to_thread(target);
|
flush_vsx_to_thread(target);
|
||||||
|
|
||||||
|
for (i = 0; i < 32 ; i++)
|
||||||
|
buf[i] = target->thread.fp_state.fpr[i][TS_VSRLOWOFFSET];
|
||||||
|
|
||||||
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
|
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
|
||||||
buf, 0, 32 * sizeof(double));
|
buf, 0, 32 * sizeof(double));
|
||||||
if (!ret)
|
if (!ret)
|
||||||
|
@ -1019,6 +1026,10 @@ static int tm_cfpr_set(struct task_struct *target,
|
||||||
flush_fp_to_thread(target);
|
flush_fp_to_thread(target);
|
||||||
flush_altivec_to_thread(target);
|
flush_altivec_to_thread(target);
|
||||||
|
|
||||||
|
for (i = 0; i < 32; i++)
|
||||||
|
buf[i] = target->thread.TS_CKFPR(i);
|
||||||
|
buf[32] = target->thread.ckfp_state.fpscr;
|
||||||
|
|
||||||
/* copy to local buffer then write that out */
|
/* copy to local buffer then write that out */
|
||||||
i = user_regset_copyin(&pos, &count, &kbuf, &ubuf, buf, 0, -1);
|
i = user_regset_copyin(&pos, &count, &kbuf, &ubuf, buf, 0, -1);
|
||||||
if (i)
|
if (i)
|
||||||
|
@ -1283,6 +1294,9 @@ static int tm_cvsx_set(struct task_struct *target,
|
||||||
flush_altivec_to_thread(target);
|
flush_altivec_to_thread(target);
|
||||||
flush_vsx_to_thread(target);
|
flush_vsx_to_thread(target);
|
||||||
|
|
||||||
|
for (i = 0; i < 32 ; i++)
|
||||||
|
buf[i] = target->thread.ckfp_state.fpr[i][TS_VSRLOWOFFSET];
|
||||||
|
|
||||||
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
|
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
|
||||||
buf, 0, 32 * sizeof(double));
|
buf, 0, 32 * sizeof(double));
|
||||||
if (!ret)
|
if (!ret)
|
||||||
|
|
|
@ -747,7 +747,7 @@ static unsigned long __init htab_get_table_size(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_MEMORY_HOTPLUG
|
#ifdef CONFIG_MEMORY_HOTPLUG
|
||||||
int create_section_mapping(unsigned long start, unsigned long end)
|
int hash__create_section_mapping(unsigned long start, unsigned long end)
|
||||||
{
|
{
|
||||||
int rc = htab_bolt_mapping(start, end, __pa(start),
|
int rc = htab_bolt_mapping(start, end, __pa(start),
|
||||||
pgprot_val(PAGE_KERNEL), mmu_linear_psize,
|
pgprot_val(PAGE_KERNEL), mmu_linear_psize,
|
||||||
|
@ -761,7 +761,7 @@ int create_section_mapping(unsigned long start, unsigned long end)
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
int remove_section_mapping(unsigned long start, unsigned long end)
|
int hash__remove_section_mapping(unsigned long start, unsigned long end)
|
||||||
{
|
{
|
||||||
int rc = htab_remove_mapping(start, end, mmu_linear_psize,
|
int rc = htab_remove_mapping(start, end, mmu_linear_psize,
|
||||||
mmu_kernel_ssize);
|
mmu_kernel_ssize);
|
||||||
|
|
|
@ -125,11 +125,14 @@ int __hash_page_huge(unsigned long ea, unsigned long access, unsigned long vsid,
|
||||||
int hugepd_ok(hugepd_t hpd)
|
int hugepd_ok(hugepd_t hpd)
|
||||||
{
|
{
|
||||||
bool is_hugepd;
|
bool is_hugepd;
|
||||||
|
unsigned long hpdval;
|
||||||
|
|
||||||
|
hpdval = hpd_val(hpd);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We should not find this format in page directory, warn otherwise.
|
* We should not find this format in page directory, warn otherwise.
|
||||||
*/
|
*/
|
||||||
is_hugepd = (((hpd.pd & 0x3) == 0x0) && ((hpd.pd & HUGEPD_SHIFT_MASK) != 0));
|
is_hugepd = (((hpdval & 0x3) == 0x0) && ((hpdval & HUGEPD_SHIFT_MASK) != 0));
|
||||||
WARN(is_hugepd, "Found wrong page directory format\n");
|
WARN(is_hugepd, "Found wrong page directory format\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,7 +53,7 @@ static u64 gpage_freearray[MAX_NUMBER_GPAGES];
|
||||||
static unsigned nr_gpages;
|
static unsigned nr_gpages;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define hugepd_none(hpd) ((hpd).pd == 0)
|
#define hugepd_none(hpd) (hpd_val(hpd) == 0)
|
||||||
|
|
||||||
pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr)
|
pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr)
|
||||||
{
|
{
|
||||||
|
@ -103,24 +103,24 @@ static int __hugepte_alloc(struct mm_struct *mm, hugepd_t *hpdp,
|
||||||
for (i = 0; i < num_hugepd; i++, hpdp++) {
|
for (i = 0; i < num_hugepd; i++, hpdp++) {
|
||||||
if (unlikely(!hugepd_none(*hpdp)))
|
if (unlikely(!hugepd_none(*hpdp)))
|
||||||
break;
|
break;
|
||||||
else
|
else {
|
||||||
#ifdef CONFIG_PPC_BOOK3S_64
|
#ifdef CONFIG_PPC_BOOK3S_64
|
||||||
hpdp->pd = __pa(new) |
|
*hpdp = __hugepd(__pa(new) |
|
||||||
(shift_to_mmu_psize(pshift) << 2);
|
(shift_to_mmu_psize(pshift) << 2));
|
||||||
#elif defined(CONFIG_PPC_8xx)
|
#elif defined(CONFIG_PPC_8xx)
|
||||||
hpdp->pd = __pa(new) |
|
*hpdp = __hugepd(__pa(new) |
|
||||||
(pshift == PAGE_SHIFT_8M ? _PMD_PAGE_8M :
|
(pshift == PAGE_SHIFT_8M ? _PMD_PAGE_8M :
|
||||||
_PMD_PAGE_512K) |
|
_PMD_PAGE_512K) | _PMD_PRESENT);
|
||||||
_PMD_PRESENT;
|
|
||||||
#else
|
#else
|
||||||
/* We use the old format for PPC_FSL_BOOK3E */
|
/* We use the old format for PPC_FSL_BOOK3E */
|
||||||
hpdp->pd = ((unsigned long)new & ~PD_HUGE) | pshift;
|
*hpdp = __hugepd(((unsigned long)new & ~PD_HUGE) | pshift);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
}
|
||||||
/* If we bailed from the for loop early, an error occurred, clean up */
|
/* If we bailed from the for loop early, an error occurred, clean up */
|
||||||
if (i < num_hugepd) {
|
if (i < num_hugepd) {
|
||||||
for (i = i - 1 ; i >= 0; i--, hpdp--)
|
for (i = i - 1 ; i >= 0; i--, hpdp--)
|
||||||
hpdp->pd = 0;
|
*hpdp = __hugepd(0);
|
||||||
kmem_cache_free(cachep, new);
|
kmem_cache_free(cachep, new);
|
||||||
}
|
}
|
||||||
spin_unlock(&mm->page_table_lock);
|
spin_unlock(&mm->page_table_lock);
|
||||||
|
@ -454,7 +454,7 @@ static void free_hugepd_range(struct mmu_gather *tlb, hugepd_t *hpdp, int pdshif
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (i = 0; i < num_hugepd; i++, hpdp++)
|
for (i = 0; i < num_hugepd; i++, hpdp++)
|
||||||
hpdp->pd = 0;
|
*hpdp = __hugepd(0);
|
||||||
|
|
||||||
if (shift >= pdshift)
|
if (shift >= pdshift)
|
||||||
hugepd_free(tlb, hugepte);
|
hugepd_free(tlb, hugepte);
|
||||||
|
@ -810,12 +810,8 @@ static int __init hugetlbpage_init(void)
|
||||||
* if we have pdshift and shift value same, we don't
|
* if we have pdshift and shift value same, we don't
|
||||||
* use pgt cache for hugepd.
|
* use pgt cache for hugepd.
|
||||||
*/
|
*/
|
||||||
if (pdshift > shift) {
|
if (pdshift > shift)
|
||||||
pgtable_cache_add(pdshift - shift, NULL);
|
pgtable_cache_add(pdshift - shift, NULL);
|
||||||
if (!PGT_CACHE(pdshift - shift))
|
|
||||||
panic("hugetlbpage_init(): could not create "
|
|
||||||
"pgtable cache for %d bit pagesize\n", shift);
|
|
||||||
}
|
|
||||||
#if defined(CONFIG_PPC_FSL_BOOK3E) || defined(CONFIG_PPC_8xx)
|
#if defined(CONFIG_PPC_FSL_BOOK3E) || defined(CONFIG_PPC_8xx)
|
||||||
else if (!hugepte_cache) {
|
else if (!hugepte_cache) {
|
||||||
/*
|
/*
|
||||||
|
@ -852,9 +848,6 @@ static int __init hugetlbpage_init(void)
|
||||||
else if (mmu_psize_defs[MMU_PAGE_2M].shift)
|
else if (mmu_psize_defs[MMU_PAGE_2M].shift)
|
||||||
HPAGE_SHIFT = mmu_psize_defs[MMU_PAGE_2M].shift;
|
HPAGE_SHIFT = mmu_psize_defs[MMU_PAGE_2M].shift;
|
||||||
#endif
|
#endif
|
||||||
else
|
|
||||||
panic("%s: Unable to set default huge page size\n", __func__);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -78,8 +78,12 @@ void pgtable_cache_add(unsigned shift, void (*ctor)(void *))
|
||||||
align = max_t(unsigned long, align, minalign);
|
align = max_t(unsigned long, align, minalign);
|
||||||
name = kasprintf(GFP_KERNEL, "pgtable-2^%d", shift);
|
name = kasprintf(GFP_KERNEL, "pgtable-2^%d", shift);
|
||||||
new = kmem_cache_create(name, table_size, align, 0, ctor);
|
new = kmem_cache_create(name, table_size, align, 0, ctor);
|
||||||
|
if (!new)
|
||||||
|
panic("Could not allocate pgtable cache for order %d", shift);
|
||||||
|
|
||||||
kfree(name);
|
kfree(name);
|
||||||
pgtable_cache[shift - 1] = new;
|
pgtable_cache[shift - 1] = new;
|
||||||
|
|
||||||
pr_debug("Allocated pgtable cache for order %d\n", shift);
|
pr_debug("Allocated pgtable cache for order %d\n", shift);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,7 +92,7 @@ void pgtable_cache_init(void)
|
||||||
{
|
{
|
||||||
pgtable_cache_add(PGD_INDEX_SIZE, pgd_ctor);
|
pgtable_cache_add(PGD_INDEX_SIZE, pgd_ctor);
|
||||||
|
|
||||||
if (PMD_INDEX_SIZE && !PGT_CACHE(PMD_INDEX_SIZE))
|
if (PMD_CACHE_INDEX && !PGT_CACHE(PMD_CACHE_INDEX))
|
||||||
pgtable_cache_add(PMD_CACHE_INDEX, pmd_ctor);
|
pgtable_cache_add(PMD_CACHE_INDEX, pmd_ctor);
|
||||||
/*
|
/*
|
||||||
* In all current configs, when the PUD index exists it's the
|
* In all current configs, when the PUD index exists it's the
|
||||||
|
@ -97,11 +101,4 @@ void pgtable_cache_init(void)
|
||||||
*/
|
*/
|
||||||
if (PUD_INDEX_SIZE && !PGT_CACHE(PUD_INDEX_SIZE))
|
if (PUD_INDEX_SIZE && !PGT_CACHE(PUD_INDEX_SIZE))
|
||||||
pgtable_cache_add(PUD_INDEX_SIZE, pud_ctor);
|
pgtable_cache_add(PUD_INDEX_SIZE, pud_ctor);
|
||||||
|
|
||||||
if (!PGT_CACHE(PGD_INDEX_SIZE))
|
|
||||||
panic("Couldn't allocate pgd cache");
|
|
||||||
if (PMD_INDEX_SIZE && !PGT_CACHE(PMD_INDEX_SIZE))
|
|
||||||
panic("Couldn't allocate pmd pgtable caches");
|
|
||||||
if (PUD_INDEX_SIZE && !PGT_CACHE(PUD_INDEX_SIZE))
|
|
||||||
panic("Couldn't allocate pud pgtable caches");
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -126,3 +126,21 @@ void mmu_cleanup_all(void)
|
||||||
else if (mmu_hash_ops.hpte_clear_all)
|
else if (mmu_hash_ops.hpte_clear_all)
|
||||||
mmu_hash_ops.hpte_clear_all();
|
mmu_hash_ops.hpte_clear_all();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_MEMORY_HOTPLUG
|
||||||
|
int create_section_mapping(unsigned long start, unsigned long end)
|
||||||
|
{
|
||||||
|
if (radix_enabled())
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
return hash__create_section_mapping(start, end);
|
||||||
|
}
|
||||||
|
|
||||||
|
int remove_section_mapping(unsigned long start, unsigned long end)
|
||||||
|
{
|
||||||
|
if (radix_enabled())
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
return hash__remove_section_mapping(start, end);
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_MEMORY_HOTPLUG */
|
||||||
|
|
|
@ -295,6 +295,8 @@ static inline void perf_read_regs(struct pt_regs *regs)
|
||||||
*/
|
*/
|
||||||
if (TRAP(regs) != 0xf00)
|
if (TRAP(regs) != 0xf00)
|
||||||
use_siar = 0;
|
use_siar = 0;
|
||||||
|
else if ((ppmu->flags & PPMU_NO_SIAR))
|
||||||
|
use_siar = 0;
|
||||||
else if (marked)
|
else if (marked)
|
||||||
use_siar = 1;
|
use_siar = 1;
|
||||||
else if ((ppmu->flags & PPMU_NO_CONT_SAMPLING))
|
else if ((ppmu->flags & PPMU_NO_CONT_SAMPLING))
|
||||||
|
|
|
@ -16,7 +16,7 @@ EVENT(PM_CYC, 0x0001e)
|
||||||
EVENT(PM_ICT_NOSLOT_CYC, 0x100f8)
|
EVENT(PM_ICT_NOSLOT_CYC, 0x100f8)
|
||||||
EVENT(PM_CMPLU_STALL, 0x1e054)
|
EVENT(PM_CMPLU_STALL, 0x1e054)
|
||||||
EVENT(PM_INST_CMPL, 0x00002)
|
EVENT(PM_INST_CMPL, 0x00002)
|
||||||
EVENT(PM_BRU_CMPL, 0x40060)
|
EVENT(PM_BRU_CMPL, 0x10012)
|
||||||
EVENT(PM_BR_MPRED_CMPL, 0x400f6)
|
EVENT(PM_BR_MPRED_CMPL, 0x400f6)
|
||||||
|
|
||||||
/* All L1 D cache load references counted at finish, gated by reject */
|
/* All L1 D cache load references counted at finish, gated by reject */
|
||||||
|
|
|
@ -384,7 +384,7 @@ static struct power_pmu power9_isa207_pmu = {
|
||||||
.bhrb_filter_map = power9_bhrb_filter_map,
|
.bhrb_filter_map = power9_bhrb_filter_map,
|
||||||
.get_constraint = isa207_get_constraint,
|
.get_constraint = isa207_get_constraint,
|
||||||
.disable_pmc = isa207_disable_pmc,
|
.disable_pmc = isa207_disable_pmc,
|
||||||
.flags = PPMU_HAS_SIER | PPMU_ARCH_207S,
|
.flags = PPMU_NO_SIAR | PPMU_ARCH_207S,
|
||||||
.n_generic = ARRAY_SIZE(power9_generic_events),
|
.n_generic = ARRAY_SIZE(power9_generic_events),
|
||||||
.generic_events = power9_generic_events,
|
.generic_events = power9_generic_events,
|
||||||
.cache_events = &power9_cache_events,
|
.cache_events = &power9_cache_events,
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include <asm/xics.h>
|
#include <asm/xics.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/opal.h>
|
#include <asm/opal.h>
|
||||||
|
#include <asm/kvm_ppc.h>
|
||||||
|
|
||||||
static void icp_opal_teardown_cpu(void)
|
static void icp_opal_teardown_cpu(void)
|
||||||
{
|
{
|
||||||
|
@ -39,7 +40,26 @@ static void icp_opal_flush_ipi(void)
|
||||||
* Should we be flagging idle loop instead?
|
* Should we be flagging idle loop instead?
|
||||||
* Or creating some task to be scheduled?
|
* Or creating some task to be scheduled?
|
||||||
*/
|
*/
|
||||||
opal_int_eoi((0x00 << 24) | XICS_IPI);
|
if (opal_int_eoi((0x00 << 24) | XICS_IPI) > 0)
|
||||||
|
force_external_irq_replay();
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned int icp_opal_get_xirr(void)
|
||||||
|
{
|
||||||
|
unsigned int kvm_xirr;
|
||||||
|
__be32 hw_xirr;
|
||||||
|
int64_t rc;
|
||||||
|
|
||||||
|
/* Handle an interrupt latched by KVM first */
|
||||||
|
kvm_xirr = kvmppc_get_xics_latch();
|
||||||
|
if (kvm_xirr)
|
||||||
|
return kvm_xirr;
|
||||||
|
|
||||||
|
/* Then ask OPAL */
|
||||||
|
rc = opal_int_get_xirr(&hw_xirr, false);
|
||||||
|
if (rc < 0)
|
||||||
|
return 0;
|
||||||
|
return be32_to_cpu(hw_xirr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int icp_opal_get_irq(void)
|
static unsigned int icp_opal_get_irq(void)
|
||||||
|
@ -47,12 +67,8 @@ static unsigned int icp_opal_get_irq(void)
|
||||||
unsigned int xirr;
|
unsigned int xirr;
|
||||||
unsigned int vec;
|
unsigned int vec;
|
||||||
unsigned int irq;
|
unsigned int irq;
|
||||||
int64_t rc;
|
|
||||||
|
|
||||||
rc = opal_int_get_xirr(&xirr, false);
|
xirr = icp_opal_get_xirr();
|
||||||
if (rc < 0)
|
|
||||||
return 0;
|
|
||||||
xirr = be32_to_cpu(xirr);
|
|
||||||
vec = xirr & 0x00ffffff;
|
vec = xirr & 0x00ffffff;
|
||||||
if (vec == XICS_IRQ_SPURIOUS)
|
if (vec == XICS_IRQ_SPURIOUS)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -67,7 +83,8 @@ static unsigned int icp_opal_get_irq(void)
|
||||||
xics_mask_unknown_vec(vec);
|
xics_mask_unknown_vec(vec);
|
||||||
|
|
||||||
/* We might learn about it later, so EOI it */
|
/* We might learn about it later, so EOI it */
|
||||||
opal_int_eoi(xirr);
|
if (opal_int_eoi(xirr) > 0)
|
||||||
|
force_external_irq_replay();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,7 +69,7 @@ CONFIG_CMA=y
|
||||||
CONFIG_CMA_DEBUG=y
|
CONFIG_CMA_DEBUG=y
|
||||||
CONFIG_CMA_DEBUGFS=y
|
CONFIG_CMA_DEBUGFS=y
|
||||||
CONFIG_MEM_SOFT_DIRTY=y
|
CONFIG_MEM_SOFT_DIRTY=y
|
||||||
CONFIG_ZPOOL=m
|
CONFIG_ZSWAP=y
|
||||||
CONFIG_ZBUD=m
|
CONFIG_ZBUD=m
|
||||||
CONFIG_ZSMALLOC=m
|
CONFIG_ZSMALLOC=m
|
||||||
CONFIG_ZSMALLOC_STAT=y
|
CONFIG_ZSMALLOC_STAT=y
|
||||||
|
@ -141,8 +141,6 @@ CONFIG_NF_CONNTRACK_SECMARK=y
|
||||||
CONFIG_NF_CONNTRACK_EVENTS=y
|
CONFIG_NF_CONNTRACK_EVENTS=y
|
||||||
CONFIG_NF_CONNTRACK_TIMEOUT=y
|
CONFIG_NF_CONNTRACK_TIMEOUT=y
|
||||||
CONFIG_NF_CONNTRACK_TIMESTAMP=y
|
CONFIG_NF_CONNTRACK_TIMESTAMP=y
|
||||||
CONFIG_NF_CT_PROTO_DCCP=m
|
|
||||||
CONFIG_NF_CT_PROTO_UDPLITE=m
|
|
||||||
CONFIG_NF_CONNTRACK_AMANDA=m
|
CONFIG_NF_CONNTRACK_AMANDA=m
|
||||||
CONFIG_NF_CONNTRACK_FTP=m
|
CONFIG_NF_CONNTRACK_FTP=m
|
||||||
CONFIG_NF_CONNTRACK_H323=m
|
CONFIG_NF_CONNTRACK_H323=m
|
||||||
|
@ -159,13 +157,12 @@ CONFIG_NF_TABLES=m
|
||||||
CONFIG_NFT_EXTHDR=m
|
CONFIG_NFT_EXTHDR=m
|
||||||
CONFIG_NFT_META=m
|
CONFIG_NFT_META=m
|
||||||
CONFIG_NFT_CT=m
|
CONFIG_NFT_CT=m
|
||||||
CONFIG_NFT_RBTREE=m
|
|
||||||
CONFIG_NFT_HASH=m
|
|
||||||
CONFIG_NFT_COUNTER=m
|
CONFIG_NFT_COUNTER=m
|
||||||
CONFIG_NFT_LOG=m
|
CONFIG_NFT_LOG=m
|
||||||
CONFIG_NFT_LIMIT=m
|
CONFIG_NFT_LIMIT=m
|
||||||
CONFIG_NFT_NAT=m
|
CONFIG_NFT_NAT=m
|
||||||
CONFIG_NFT_COMPAT=m
|
CONFIG_NFT_COMPAT=m
|
||||||
|
CONFIG_NFT_HASH=m
|
||||||
CONFIG_NETFILTER_XT_SET=m
|
CONFIG_NETFILTER_XT_SET=m
|
||||||
CONFIG_NETFILTER_XT_TARGET_AUDIT=m
|
CONFIG_NETFILTER_XT_TARGET_AUDIT=m
|
||||||
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
|
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
|
||||||
|
@ -219,7 +216,6 @@ CONFIG_NETFILTER_XT_MATCH_QUOTA=m
|
||||||
CONFIG_NETFILTER_XT_MATCH_RATEEST=m
|
CONFIG_NETFILTER_XT_MATCH_RATEEST=m
|
||||||
CONFIG_NETFILTER_XT_MATCH_REALM=m
|
CONFIG_NETFILTER_XT_MATCH_REALM=m
|
||||||
CONFIG_NETFILTER_XT_MATCH_RECENT=m
|
CONFIG_NETFILTER_XT_MATCH_RECENT=m
|
||||||
CONFIG_NETFILTER_XT_MATCH_SOCKET=m
|
|
||||||
CONFIG_NETFILTER_XT_MATCH_STATE=m
|
CONFIG_NETFILTER_XT_MATCH_STATE=m
|
||||||
CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
|
CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
|
||||||
CONFIG_NETFILTER_XT_MATCH_STRING=m
|
CONFIG_NETFILTER_XT_MATCH_STRING=m
|
||||||
|
@ -258,7 +254,6 @@ CONFIG_IP_VS_NQ=m
|
||||||
CONFIG_IP_VS_FTP=m
|
CONFIG_IP_VS_FTP=m
|
||||||
CONFIG_IP_VS_PE_SIP=m
|
CONFIG_IP_VS_PE_SIP=m
|
||||||
CONFIG_NF_CONNTRACK_IPV4=m
|
CONFIG_NF_CONNTRACK_IPV4=m
|
||||||
# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
|
|
||||||
CONFIG_NF_TABLES_IPV4=m
|
CONFIG_NF_TABLES_IPV4=m
|
||||||
CONFIG_NFT_CHAIN_ROUTE_IPV4=m
|
CONFIG_NFT_CHAIN_ROUTE_IPV4=m
|
||||||
CONFIG_NF_TABLES_ARP=m
|
CONFIG_NF_TABLES_ARP=m
|
||||||
|
@ -436,7 +431,6 @@ CONFIG_EQUALIZER=m
|
||||||
CONFIG_IFB=m
|
CONFIG_IFB=m
|
||||||
CONFIG_MACVLAN=m
|
CONFIG_MACVLAN=m
|
||||||
CONFIG_MACVTAP=m
|
CONFIG_MACVTAP=m
|
||||||
CONFIG_IPVLAN=m
|
|
||||||
CONFIG_VXLAN=m
|
CONFIG_VXLAN=m
|
||||||
CONFIG_TUN=m
|
CONFIG_TUN=m
|
||||||
CONFIG_VETH=m
|
CONFIG_VETH=m
|
||||||
|
@ -480,6 +474,7 @@ CONFIG_VIRTIO_BALLOON=m
|
||||||
CONFIG_EXT4_FS=y
|
CONFIG_EXT4_FS=y
|
||||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||||
CONFIG_EXT4_FS_SECURITY=y
|
CONFIG_EXT4_FS_SECURITY=y
|
||||||
|
CONFIG_EXT4_ENCRYPTION=y
|
||||||
CONFIG_JBD2_DEBUG=y
|
CONFIG_JBD2_DEBUG=y
|
||||||
CONFIG_JFS_FS=m
|
CONFIG_JFS_FS=m
|
||||||
CONFIG_JFS_POSIX_ACL=y
|
CONFIG_JFS_POSIX_ACL=y
|
||||||
|
@ -592,14 +587,12 @@ CONFIG_LOCK_STAT=y
|
||||||
CONFIG_DEBUG_LOCKDEP=y
|
CONFIG_DEBUG_LOCKDEP=y
|
||||||
CONFIG_DEBUG_ATOMIC_SLEEP=y
|
CONFIG_DEBUG_ATOMIC_SLEEP=y
|
||||||
CONFIG_DEBUG_LOCKING_API_SELFTESTS=y
|
CONFIG_DEBUG_LOCKING_API_SELFTESTS=y
|
||||||
CONFIG_DEBUG_LIST=y
|
|
||||||
CONFIG_DEBUG_SG=y
|
CONFIG_DEBUG_SG=y
|
||||||
CONFIG_DEBUG_NOTIFIERS=y
|
CONFIG_DEBUG_NOTIFIERS=y
|
||||||
CONFIG_DEBUG_CREDENTIALS=y
|
CONFIG_DEBUG_CREDENTIALS=y
|
||||||
CONFIG_RCU_TORTURE_TEST=m
|
CONFIG_RCU_TORTURE_TEST=m
|
||||||
CONFIG_RCU_CPU_STALL_TIMEOUT=300
|
CONFIG_RCU_CPU_STALL_TIMEOUT=300
|
||||||
CONFIG_NOTIFIER_ERROR_INJECTION=m
|
CONFIG_NOTIFIER_ERROR_INJECTION=m
|
||||||
CONFIG_CPU_NOTIFIER_ERROR_INJECT=m
|
|
||||||
CONFIG_PM_NOTIFIER_ERROR_INJECT=m
|
CONFIG_PM_NOTIFIER_ERROR_INJECT=m
|
||||||
CONFIG_FAULT_INJECTION=y
|
CONFIG_FAULT_INJECTION=y
|
||||||
CONFIG_FAILSLAB=y
|
CONFIG_FAILSLAB=y
|
||||||
|
@ -618,6 +611,7 @@ CONFIG_STACK_TRACER=y
|
||||||
CONFIG_BLK_DEV_IO_TRACE=y
|
CONFIG_BLK_DEV_IO_TRACE=y
|
||||||
CONFIG_UPROBE_EVENT=y
|
CONFIG_UPROBE_EVENT=y
|
||||||
CONFIG_FUNCTION_PROFILER=y
|
CONFIG_FUNCTION_PROFILER=y
|
||||||
|
CONFIG_HIST_TRIGGERS=y
|
||||||
CONFIG_TRACE_ENUM_MAP_FILE=y
|
CONFIG_TRACE_ENUM_MAP_FILE=y
|
||||||
CONFIG_LKDTM=m
|
CONFIG_LKDTM=m
|
||||||
CONFIG_TEST_LIST_SORT=y
|
CONFIG_TEST_LIST_SORT=y
|
||||||
|
@ -630,6 +624,7 @@ CONFIG_TEST_STRING_HELPERS=y
|
||||||
CONFIG_TEST_KSTRTOX=y
|
CONFIG_TEST_KSTRTOX=y
|
||||||
CONFIG_DMA_API_DEBUG=y
|
CONFIG_DMA_API_DEBUG=y
|
||||||
CONFIG_TEST_BPF=m
|
CONFIG_TEST_BPF=m
|
||||||
|
CONFIG_BUG_ON_DATA_CORRUPTION=y
|
||||||
CONFIG_S390_PTDUMP=y
|
CONFIG_S390_PTDUMP=y
|
||||||
CONFIG_ENCRYPTED_KEYS=m
|
CONFIG_ENCRYPTED_KEYS=m
|
||||||
CONFIG_SECURITY=y
|
CONFIG_SECURITY=y
|
||||||
|
@ -640,16 +635,18 @@ CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
|
||||||
CONFIG_SECURITY_SELINUX_DISABLE=y
|
CONFIG_SECURITY_SELINUX_DISABLE=y
|
||||||
CONFIG_IMA=y
|
CONFIG_IMA=y
|
||||||
CONFIG_IMA_APPRAISE=y
|
CONFIG_IMA_APPRAISE=y
|
||||||
|
CONFIG_CRYPTO_RSA=m
|
||||||
|
CONFIG_CRYPTO_DH=m
|
||||||
|
CONFIG_CRYPTO_ECDH=m
|
||||||
CONFIG_CRYPTO_USER=m
|
CONFIG_CRYPTO_USER=m
|
||||||
# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
|
|
||||||
CONFIG_CRYPTO_CRYPTD=m
|
CONFIG_CRYPTO_CRYPTD=m
|
||||||
CONFIG_CRYPTO_TEST=m
|
CONFIG_CRYPTO_TEST=m
|
||||||
CONFIG_CRYPTO_CCM=m
|
CONFIG_CRYPTO_CCM=m
|
||||||
CONFIG_CRYPTO_GCM=m
|
CONFIG_CRYPTO_GCM=m
|
||||||
CONFIG_CRYPTO_CTS=m
|
CONFIG_CRYPTO_CHACHA20POLY1305=m
|
||||||
CONFIG_CRYPTO_LRW=m
|
CONFIG_CRYPTO_LRW=m
|
||||||
CONFIG_CRYPTO_PCBC=m
|
CONFIG_CRYPTO_PCBC=m
|
||||||
CONFIG_CRYPTO_XTS=m
|
CONFIG_CRYPTO_KEYWRAP=m
|
||||||
CONFIG_CRYPTO_XCBC=m
|
CONFIG_CRYPTO_XCBC=m
|
||||||
CONFIG_CRYPTO_VMAC=m
|
CONFIG_CRYPTO_VMAC=m
|
||||||
CONFIG_CRYPTO_CRC32=m
|
CONFIG_CRYPTO_CRC32=m
|
||||||
|
@ -673,11 +670,13 @@ CONFIG_CRYPTO_SEED=m
|
||||||
CONFIG_CRYPTO_SERPENT=m
|
CONFIG_CRYPTO_SERPENT=m
|
||||||
CONFIG_CRYPTO_TEA=m
|
CONFIG_CRYPTO_TEA=m
|
||||||
CONFIG_CRYPTO_TWOFISH=m
|
CONFIG_CRYPTO_TWOFISH=m
|
||||||
CONFIG_CRYPTO_LZO=m
|
CONFIG_CRYPTO_842=m
|
||||||
CONFIG_CRYPTO_LZ4=m
|
CONFIG_CRYPTO_LZ4=m
|
||||||
CONFIG_CRYPTO_LZ4HC=m
|
CONFIG_CRYPTO_LZ4HC=m
|
||||||
CONFIG_CRYPTO_USER_API_HASH=m
|
CONFIG_CRYPTO_USER_API_HASH=m
|
||||||
CONFIG_CRYPTO_USER_API_SKCIPHER=m
|
CONFIG_CRYPTO_USER_API_SKCIPHER=m
|
||||||
|
CONFIG_CRYPTO_USER_API_RNG=m
|
||||||
|
CONFIG_CRYPTO_USER_API_AEAD=m
|
||||||
CONFIG_ZCRYPT=m
|
CONFIG_ZCRYPT=m
|
||||||
CONFIG_CRYPTO_SHA1_S390=m
|
CONFIG_CRYPTO_SHA1_S390=m
|
||||||
CONFIG_CRYPTO_SHA256_S390=m
|
CONFIG_CRYPTO_SHA256_S390=m
|
||||||
|
|
|
@ -12,6 +12,7 @@ CONFIG_TASK_IO_ACCOUNTING=y
|
||||||
CONFIG_IKCONFIG=y
|
CONFIG_IKCONFIG=y
|
||||||
CONFIG_IKCONFIG_PROC=y
|
CONFIG_IKCONFIG_PROC=y
|
||||||
CONFIG_NUMA_BALANCING=y
|
CONFIG_NUMA_BALANCING=y
|
||||||
|
# CONFIG_NUMA_BALANCING_DEFAULT_ENABLED is not set
|
||||||
CONFIG_MEMCG=y
|
CONFIG_MEMCG=y
|
||||||
CONFIG_MEMCG_SWAP=y
|
CONFIG_MEMCG_SWAP=y
|
||||||
CONFIG_BLK_CGROUP=y
|
CONFIG_BLK_CGROUP=y
|
||||||
|
@ -54,8 +55,9 @@ CONFIG_SOLARIS_X86_PARTITION=y
|
||||||
CONFIG_UNIXWARE_DISKLABEL=y
|
CONFIG_UNIXWARE_DISKLABEL=y
|
||||||
CONFIG_CFQ_GROUP_IOSCHED=y
|
CONFIG_CFQ_GROUP_IOSCHED=y
|
||||||
CONFIG_DEFAULT_DEADLINE=y
|
CONFIG_DEFAULT_DEADLINE=y
|
||||||
|
CONFIG_LIVEPATCH=y
|
||||||
CONFIG_TUNE_ZEC12=y
|
CONFIG_TUNE_ZEC12=y
|
||||||
CONFIG_NR_CPUS=256
|
CONFIG_NR_CPUS=512
|
||||||
CONFIG_NUMA=y
|
CONFIG_NUMA=y
|
||||||
CONFIG_HZ_100=y
|
CONFIG_HZ_100=y
|
||||||
CONFIG_MEMORY_HOTPLUG=y
|
CONFIG_MEMORY_HOTPLUG=y
|
||||||
|
@ -65,6 +67,7 @@ CONFIG_TRANSPARENT_HUGEPAGE=y
|
||||||
CONFIG_CLEANCACHE=y
|
CONFIG_CLEANCACHE=y
|
||||||
CONFIG_FRONTSWAP=y
|
CONFIG_FRONTSWAP=y
|
||||||
CONFIG_CMA=y
|
CONFIG_CMA=y
|
||||||
|
CONFIG_MEM_SOFT_DIRTY=y
|
||||||
CONFIG_ZSWAP=y
|
CONFIG_ZSWAP=y
|
||||||
CONFIG_ZBUD=m
|
CONFIG_ZBUD=m
|
||||||
CONFIG_ZSMALLOC=m
|
CONFIG_ZSMALLOC=m
|
||||||
|
@ -136,8 +139,6 @@ CONFIG_NF_CONNTRACK_SECMARK=y
|
||||||
CONFIG_NF_CONNTRACK_EVENTS=y
|
CONFIG_NF_CONNTRACK_EVENTS=y
|
||||||
CONFIG_NF_CONNTRACK_TIMEOUT=y
|
CONFIG_NF_CONNTRACK_TIMEOUT=y
|
||||||
CONFIG_NF_CONNTRACK_TIMESTAMP=y
|
CONFIG_NF_CONNTRACK_TIMESTAMP=y
|
||||||
CONFIG_NF_CT_PROTO_DCCP=m
|
|
||||||
CONFIG_NF_CT_PROTO_UDPLITE=m
|
|
||||||
CONFIG_NF_CONNTRACK_AMANDA=m
|
CONFIG_NF_CONNTRACK_AMANDA=m
|
||||||
CONFIG_NF_CONNTRACK_FTP=m
|
CONFIG_NF_CONNTRACK_FTP=m
|
||||||
CONFIG_NF_CONNTRACK_H323=m
|
CONFIG_NF_CONNTRACK_H323=m
|
||||||
|
@ -154,13 +155,12 @@ CONFIG_NF_TABLES=m
|
||||||
CONFIG_NFT_EXTHDR=m
|
CONFIG_NFT_EXTHDR=m
|
||||||
CONFIG_NFT_META=m
|
CONFIG_NFT_META=m
|
||||||
CONFIG_NFT_CT=m
|
CONFIG_NFT_CT=m
|
||||||
CONFIG_NFT_RBTREE=m
|
|
||||||
CONFIG_NFT_HASH=m
|
|
||||||
CONFIG_NFT_COUNTER=m
|
CONFIG_NFT_COUNTER=m
|
||||||
CONFIG_NFT_LOG=m
|
CONFIG_NFT_LOG=m
|
||||||
CONFIG_NFT_LIMIT=m
|
CONFIG_NFT_LIMIT=m
|
||||||
CONFIG_NFT_NAT=m
|
CONFIG_NFT_NAT=m
|
||||||
CONFIG_NFT_COMPAT=m
|
CONFIG_NFT_COMPAT=m
|
||||||
|
CONFIG_NFT_HASH=m
|
||||||
CONFIG_NETFILTER_XT_SET=m
|
CONFIG_NETFILTER_XT_SET=m
|
||||||
CONFIG_NETFILTER_XT_TARGET_AUDIT=m
|
CONFIG_NETFILTER_XT_TARGET_AUDIT=m
|
||||||
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
|
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
|
||||||
|
@ -214,7 +214,6 @@ CONFIG_NETFILTER_XT_MATCH_QUOTA=m
|
||||||
CONFIG_NETFILTER_XT_MATCH_RATEEST=m
|
CONFIG_NETFILTER_XT_MATCH_RATEEST=m
|
||||||
CONFIG_NETFILTER_XT_MATCH_REALM=m
|
CONFIG_NETFILTER_XT_MATCH_REALM=m
|
||||||
CONFIG_NETFILTER_XT_MATCH_RECENT=m
|
CONFIG_NETFILTER_XT_MATCH_RECENT=m
|
||||||
CONFIG_NETFILTER_XT_MATCH_SOCKET=m
|
|
||||||
CONFIG_NETFILTER_XT_MATCH_STATE=m
|
CONFIG_NETFILTER_XT_MATCH_STATE=m
|
||||||
CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
|
CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
|
||||||
CONFIG_NETFILTER_XT_MATCH_STRING=m
|
CONFIG_NETFILTER_XT_MATCH_STRING=m
|
||||||
|
@ -253,7 +252,6 @@ CONFIG_IP_VS_NQ=m
|
||||||
CONFIG_IP_VS_FTP=m
|
CONFIG_IP_VS_FTP=m
|
||||||
CONFIG_IP_VS_PE_SIP=m
|
CONFIG_IP_VS_PE_SIP=m
|
||||||
CONFIG_NF_CONNTRACK_IPV4=m
|
CONFIG_NF_CONNTRACK_IPV4=m
|
||||||
# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
|
|
||||||
CONFIG_NF_TABLES_IPV4=m
|
CONFIG_NF_TABLES_IPV4=m
|
||||||
CONFIG_NFT_CHAIN_ROUTE_IPV4=m
|
CONFIG_NFT_CHAIN_ROUTE_IPV4=m
|
||||||
CONFIG_NF_TABLES_ARP=m
|
CONFIG_NF_TABLES_ARP=m
|
||||||
|
@ -430,7 +428,6 @@ CONFIG_EQUALIZER=m
|
||||||
CONFIG_IFB=m
|
CONFIG_IFB=m
|
||||||
CONFIG_MACVLAN=m
|
CONFIG_MACVLAN=m
|
||||||
CONFIG_MACVTAP=m
|
CONFIG_MACVTAP=m
|
||||||
CONFIG_IPVLAN=m
|
|
||||||
CONFIG_VXLAN=m
|
CONFIG_VXLAN=m
|
||||||
CONFIG_TUN=m
|
CONFIG_TUN=m
|
||||||
CONFIG_VETH=m
|
CONFIG_VETH=m
|
||||||
|
@ -460,6 +457,7 @@ CONFIG_HW_RANDOM_VIRTIO=m
|
||||||
CONFIG_RAW_DRIVER=m
|
CONFIG_RAW_DRIVER=m
|
||||||
CONFIG_HANGCHECK_TIMER=m
|
CONFIG_HANGCHECK_TIMER=m
|
||||||
CONFIG_TN3270_FS=y
|
CONFIG_TN3270_FS=y
|
||||||
|
# CONFIG_HWMON is not set
|
||||||
CONFIG_WATCHDOG=y
|
CONFIG_WATCHDOG=y
|
||||||
CONFIG_WATCHDOG_NOWAYOUT=y
|
CONFIG_WATCHDOG_NOWAYOUT=y
|
||||||
CONFIG_SOFT_WATCHDOG=m
|
CONFIG_SOFT_WATCHDOG=m
|
||||||
|
@ -473,6 +471,7 @@ CONFIG_VIRTIO_BALLOON=m
|
||||||
CONFIG_EXT4_FS=y
|
CONFIG_EXT4_FS=y
|
||||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||||
CONFIG_EXT4_FS_SECURITY=y
|
CONFIG_EXT4_FS_SECURITY=y
|
||||||
|
CONFIG_EXT4_ENCRYPTION=y
|
||||||
CONFIG_JBD2_DEBUG=y
|
CONFIG_JBD2_DEBUG=y
|
||||||
CONFIG_JFS_FS=m
|
CONFIG_JFS_FS=m
|
||||||
CONFIG_JFS_POSIX_ACL=y
|
CONFIG_JFS_POSIX_ACL=y
|
||||||
|
@ -495,6 +494,7 @@ CONFIG_AUTOFS4_FS=m
|
||||||
CONFIG_FUSE_FS=y
|
CONFIG_FUSE_FS=y
|
||||||
CONFIG_CUSE=m
|
CONFIG_CUSE=m
|
||||||
CONFIG_OVERLAY_FS=m
|
CONFIG_OVERLAY_FS=m
|
||||||
|
CONFIG_OVERLAY_FS_REDIRECT_DIR=y
|
||||||
CONFIG_FSCACHE=m
|
CONFIG_FSCACHE=m
|
||||||
CONFIG_CACHEFILES=m
|
CONFIG_CACHEFILES=m
|
||||||
CONFIG_ISO9660_FS=y
|
CONFIG_ISO9660_FS=y
|
||||||
|
@ -551,25 +551,27 @@ CONFIG_FRAME_WARN=1024
|
||||||
CONFIG_UNUSED_SYMBOLS=y
|
CONFIG_UNUSED_SYMBOLS=y
|
||||||
CONFIG_MAGIC_SYSRQ=y
|
CONFIG_MAGIC_SYSRQ=y
|
||||||
CONFIG_DEBUG_MEMORY_INIT=y
|
CONFIG_DEBUG_MEMORY_INIT=y
|
||||||
CONFIG_MEMORY_NOTIFIER_ERROR_INJECT=m
|
|
||||||
CONFIG_PANIC_ON_OOPS=y
|
CONFIG_PANIC_ON_OOPS=y
|
||||||
CONFIG_TIMER_STATS=y
|
CONFIG_TIMER_STATS=y
|
||||||
CONFIG_RCU_TORTURE_TEST=m
|
CONFIG_RCU_TORTURE_TEST=m
|
||||||
CONFIG_RCU_CPU_STALL_TIMEOUT=60
|
CONFIG_RCU_CPU_STALL_TIMEOUT=60
|
||||||
CONFIG_NOTIFIER_ERROR_INJECTION=m
|
|
||||||
CONFIG_CPU_NOTIFIER_ERROR_INJECT=m
|
|
||||||
CONFIG_PM_NOTIFIER_ERROR_INJECT=m
|
|
||||||
CONFIG_LATENCYTOP=y
|
CONFIG_LATENCYTOP=y
|
||||||
|
CONFIG_SCHED_TRACER=y
|
||||||
|
CONFIG_FTRACE_SYSCALLS=y
|
||||||
|
CONFIG_STACK_TRACER=y
|
||||||
CONFIG_BLK_DEV_IO_TRACE=y
|
CONFIG_BLK_DEV_IO_TRACE=y
|
||||||
# CONFIG_KPROBE_EVENT is not set
|
CONFIG_UPROBE_EVENT=y
|
||||||
|
CONFIG_FUNCTION_PROFILER=y
|
||||||
|
CONFIG_HIST_TRIGGERS=y
|
||||||
CONFIG_TRACE_ENUM_MAP_FILE=y
|
CONFIG_TRACE_ENUM_MAP_FILE=y
|
||||||
CONFIG_LKDTM=m
|
CONFIG_LKDTM=m
|
||||||
CONFIG_RBTREE_TEST=m
|
|
||||||
CONFIG_INTERVAL_TREE_TEST=m
|
|
||||||
CONFIG_PERCPU_TEST=m
|
CONFIG_PERCPU_TEST=m
|
||||||
CONFIG_ATOMIC64_SELFTEST=y
|
CONFIG_ATOMIC64_SELFTEST=y
|
||||||
CONFIG_TEST_BPF=m
|
CONFIG_TEST_BPF=m
|
||||||
|
CONFIG_BUG_ON_DATA_CORRUPTION=y
|
||||||
CONFIG_S390_PTDUMP=y
|
CONFIG_S390_PTDUMP=y
|
||||||
|
CONFIG_PERSISTENT_KEYRINGS=y
|
||||||
|
CONFIG_BIG_KEYS=y
|
||||||
CONFIG_ENCRYPTED_KEYS=m
|
CONFIG_ENCRYPTED_KEYS=m
|
||||||
CONFIG_SECURITY=y
|
CONFIG_SECURITY=y
|
||||||
CONFIG_SECURITY_NETWORK=y
|
CONFIG_SECURITY_NETWORK=y
|
||||||
|
@ -577,18 +579,25 @@ CONFIG_SECURITY_SELINUX=y
|
||||||
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
|
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
|
||||||
CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
|
CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
|
||||||
CONFIG_SECURITY_SELINUX_DISABLE=y
|
CONFIG_SECURITY_SELINUX_DISABLE=y
|
||||||
|
CONFIG_INTEGRITY_SIGNATURE=y
|
||||||
|
CONFIG_INTEGRITY_ASYMMETRIC_KEYS=y
|
||||||
CONFIG_IMA=y
|
CONFIG_IMA=y
|
||||||
|
CONFIG_IMA_WRITE_POLICY=y
|
||||||
CONFIG_IMA_APPRAISE=y
|
CONFIG_IMA_APPRAISE=y
|
||||||
|
CONFIG_CRYPTO_DH=m
|
||||||
|
CONFIG_CRYPTO_ECDH=m
|
||||||
CONFIG_CRYPTO_USER=m
|
CONFIG_CRYPTO_USER=m
|
||||||
# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
|
# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
|
||||||
|
CONFIG_CRYPTO_PCRYPT=m
|
||||||
CONFIG_CRYPTO_CRYPTD=m
|
CONFIG_CRYPTO_CRYPTD=m
|
||||||
|
CONFIG_CRYPTO_MCRYPTD=m
|
||||||
CONFIG_CRYPTO_TEST=m
|
CONFIG_CRYPTO_TEST=m
|
||||||
CONFIG_CRYPTO_CCM=m
|
CONFIG_CRYPTO_CCM=m
|
||||||
CONFIG_CRYPTO_GCM=m
|
CONFIG_CRYPTO_GCM=m
|
||||||
CONFIG_CRYPTO_CTS=m
|
CONFIG_CRYPTO_CHACHA20POLY1305=m
|
||||||
CONFIG_CRYPTO_LRW=m
|
CONFIG_CRYPTO_LRW=m
|
||||||
CONFIG_CRYPTO_PCBC=m
|
CONFIG_CRYPTO_PCBC=m
|
||||||
CONFIG_CRYPTO_XTS=m
|
CONFIG_CRYPTO_KEYWRAP=m
|
||||||
CONFIG_CRYPTO_XCBC=m
|
CONFIG_CRYPTO_XCBC=m
|
||||||
CONFIG_CRYPTO_VMAC=m
|
CONFIG_CRYPTO_VMAC=m
|
||||||
CONFIG_CRYPTO_CRC32=m
|
CONFIG_CRYPTO_CRC32=m
|
||||||
|
@ -598,6 +607,7 @@ CONFIG_CRYPTO_RMD160=m
|
||||||
CONFIG_CRYPTO_RMD256=m
|
CONFIG_CRYPTO_RMD256=m
|
||||||
CONFIG_CRYPTO_RMD320=m
|
CONFIG_CRYPTO_RMD320=m
|
||||||
CONFIG_CRYPTO_SHA512=m
|
CONFIG_CRYPTO_SHA512=m
|
||||||
|
CONFIG_CRYPTO_SHA3=m
|
||||||
CONFIG_CRYPTO_TGR192=m
|
CONFIG_CRYPTO_TGR192=m
|
||||||
CONFIG_CRYPTO_WP512=m
|
CONFIG_CRYPTO_WP512=m
|
||||||
CONFIG_CRYPTO_ANUBIS=m
|
CONFIG_CRYPTO_ANUBIS=m
|
||||||
|
@ -612,10 +622,13 @@ CONFIG_CRYPTO_SEED=m
|
||||||
CONFIG_CRYPTO_SERPENT=m
|
CONFIG_CRYPTO_SERPENT=m
|
||||||
CONFIG_CRYPTO_TEA=m
|
CONFIG_CRYPTO_TEA=m
|
||||||
CONFIG_CRYPTO_TWOFISH=m
|
CONFIG_CRYPTO_TWOFISH=m
|
||||||
|
CONFIG_CRYPTO_842=m
|
||||||
CONFIG_CRYPTO_LZ4=m
|
CONFIG_CRYPTO_LZ4=m
|
||||||
CONFIG_CRYPTO_LZ4HC=m
|
CONFIG_CRYPTO_LZ4HC=m
|
||||||
CONFIG_CRYPTO_USER_API_HASH=m
|
CONFIG_CRYPTO_USER_API_HASH=m
|
||||||
CONFIG_CRYPTO_USER_API_SKCIPHER=m
|
CONFIG_CRYPTO_USER_API_SKCIPHER=m
|
||||||
|
CONFIG_CRYPTO_USER_API_RNG=m
|
||||||
|
CONFIG_CRYPTO_USER_API_AEAD=m
|
||||||
CONFIG_ZCRYPT=m
|
CONFIG_ZCRYPT=m
|
||||||
CONFIG_CRYPTO_SHA1_S390=m
|
CONFIG_CRYPTO_SHA1_S390=m
|
||||||
CONFIG_CRYPTO_SHA256_S390=m
|
CONFIG_CRYPTO_SHA256_S390=m
|
||||||
|
@ -624,9 +637,6 @@ CONFIG_CRYPTO_DES_S390=m
|
||||||
CONFIG_CRYPTO_AES_S390=m
|
CONFIG_CRYPTO_AES_S390=m
|
||||||
CONFIG_CRYPTO_GHASH_S390=m
|
CONFIG_CRYPTO_GHASH_S390=m
|
||||||
CONFIG_CRYPTO_CRC32_S390=y
|
CONFIG_CRYPTO_CRC32_S390=y
|
||||||
CONFIG_ASYMMETRIC_KEY_TYPE=y
|
|
||||||
CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m
|
|
||||||
CONFIG_X509_CERTIFICATE_PARSER=m
|
|
||||||
CONFIG_CRC7=m
|
CONFIG_CRC7=m
|
||||||
CONFIG_CRC8=m
|
CONFIG_CRC8=m
|
||||||
CONFIG_CORDIC=m
|
CONFIG_CORDIC=m
|
||||||
|
|
|
@ -65,6 +65,7 @@ CONFIG_TRANSPARENT_HUGEPAGE=y
|
||||||
CONFIG_CLEANCACHE=y
|
CONFIG_CLEANCACHE=y
|
||||||
CONFIG_FRONTSWAP=y
|
CONFIG_FRONTSWAP=y
|
||||||
CONFIG_CMA=y
|
CONFIG_CMA=y
|
||||||
|
CONFIG_MEM_SOFT_DIRTY=y
|
||||||
CONFIG_ZSWAP=y
|
CONFIG_ZSWAP=y
|
||||||
CONFIG_ZBUD=m
|
CONFIG_ZBUD=m
|
||||||
CONFIG_ZSMALLOC=m
|
CONFIG_ZSMALLOC=m
|
||||||
|
@ -136,8 +137,6 @@ CONFIG_NF_CONNTRACK_SECMARK=y
|
||||||
CONFIG_NF_CONNTRACK_EVENTS=y
|
CONFIG_NF_CONNTRACK_EVENTS=y
|
||||||
CONFIG_NF_CONNTRACK_TIMEOUT=y
|
CONFIG_NF_CONNTRACK_TIMEOUT=y
|
||||||
CONFIG_NF_CONNTRACK_TIMESTAMP=y
|
CONFIG_NF_CONNTRACK_TIMESTAMP=y
|
||||||
CONFIG_NF_CT_PROTO_DCCP=m
|
|
||||||
CONFIG_NF_CT_PROTO_UDPLITE=m
|
|
||||||
CONFIG_NF_CONNTRACK_AMANDA=m
|
CONFIG_NF_CONNTRACK_AMANDA=m
|
||||||
CONFIG_NF_CONNTRACK_FTP=m
|
CONFIG_NF_CONNTRACK_FTP=m
|
||||||
CONFIG_NF_CONNTRACK_H323=m
|
CONFIG_NF_CONNTRACK_H323=m
|
||||||
|
@ -154,13 +153,12 @@ CONFIG_NF_TABLES=m
|
||||||
CONFIG_NFT_EXTHDR=m
|
CONFIG_NFT_EXTHDR=m
|
||||||
CONFIG_NFT_META=m
|
CONFIG_NFT_META=m
|
||||||
CONFIG_NFT_CT=m
|
CONFIG_NFT_CT=m
|
||||||
CONFIG_NFT_RBTREE=m
|
|
||||||
CONFIG_NFT_HASH=m
|
|
||||||
CONFIG_NFT_COUNTER=m
|
CONFIG_NFT_COUNTER=m
|
||||||
CONFIG_NFT_LOG=m
|
CONFIG_NFT_LOG=m
|
||||||
CONFIG_NFT_LIMIT=m
|
CONFIG_NFT_LIMIT=m
|
||||||
CONFIG_NFT_NAT=m
|
CONFIG_NFT_NAT=m
|
||||||
CONFIG_NFT_COMPAT=m
|
CONFIG_NFT_COMPAT=m
|
||||||
|
CONFIG_NFT_HASH=m
|
||||||
CONFIG_NETFILTER_XT_SET=m
|
CONFIG_NETFILTER_XT_SET=m
|
||||||
CONFIG_NETFILTER_XT_TARGET_AUDIT=m
|
CONFIG_NETFILTER_XT_TARGET_AUDIT=m
|
||||||
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
|
CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
|
||||||
|
@ -214,7 +212,6 @@ CONFIG_NETFILTER_XT_MATCH_QUOTA=m
|
||||||
CONFIG_NETFILTER_XT_MATCH_RATEEST=m
|
CONFIG_NETFILTER_XT_MATCH_RATEEST=m
|
||||||
CONFIG_NETFILTER_XT_MATCH_REALM=m
|
CONFIG_NETFILTER_XT_MATCH_REALM=m
|
||||||
CONFIG_NETFILTER_XT_MATCH_RECENT=m
|
CONFIG_NETFILTER_XT_MATCH_RECENT=m
|
||||||
CONFIG_NETFILTER_XT_MATCH_SOCKET=m
|
|
||||||
CONFIG_NETFILTER_XT_MATCH_STATE=m
|
CONFIG_NETFILTER_XT_MATCH_STATE=m
|
||||||
CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
|
CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
|
||||||
CONFIG_NETFILTER_XT_MATCH_STRING=m
|
CONFIG_NETFILTER_XT_MATCH_STRING=m
|
||||||
|
@ -253,7 +250,6 @@ CONFIG_IP_VS_NQ=m
|
||||||
CONFIG_IP_VS_FTP=m
|
CONFIG_IP_VS_FTP=m
|
||||||
CONFIG_IP_VS_PE_SIP=m
|
CONFIG_IP_VS_PE_SIP=m
|
||||||
CONFIG_NF_CONNTRACK_IPV4=m
|
CONFIG_NF_CONNTRACK_IPV4=m
|
||||||
# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
|
|
||||||
CONFIG_NF_TABLES_IPV4=m
|
CONFIG_NF_TABLES_IPV4=m
|
||||||
CONFIG_NFT_CHAIN_ROUTE_IPV4=m
|
CONFIG_NFT_CHAIN_ROUTE_IPV4=m
|
||||||
CONFIG_NF_TABLES_ARP=m
|
CONFIG_NF_TABLES_ARP=m
|
||||||
|
@ -430,7 +426,6 @@ CONFIG_EQUALIZER=m
|
||||||
CONFIG_IFB=m
|
CONFIG_IFB=m
|
||||||
CONFIG_MACVLAN=m
|
CONFIG_MACVLAN=m
|
||||||
CONFIG_MACVTAP=m
|
CONFIG_MACVTAP=m
|
||||||
CONFIG_IPVLAN=m
|
|
||||||
CONFIG_VXLAN=m
|
CONFIG_VXLAN=m
|
||||||
CONFIG_TUN=m
|
CONFIG_TUN=m
|
||||||
CONFIG_VETH=m
|
CONFIG_VETH=m
|
||||||
|
@ -474,6 +469,7 @@ CONFIG_VIRTIO_BALLOON=m
|
||||||
CONFIG_EXT4_FS=y
|
CONFIG_EXT4_FS=y
|
||||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||||
CONFIG_EXT4_FS_SECURITY=y
|
CONFIG_EXT4_FS_SECURITY=y
|
||||||
|
CONFIG_EXT4_ENCRYPTION=y
|
||||||
CONFIG_JBD2_DEBUG=y
|
CONFIG_JBD2_DEBUG=y
|
||||||
CONFIG_JFS_FS=m
|
CONFIG_JFS_FS=m
|
||||||
CONFIG_JFS_POSIX_ACL=y
|
CONFIG_JFS_POSIX_ACL=y
|
||||||
|
@ -496,6 +492,7 @@ CONFIG_AUTOFS4_FS=m
|
||||||
CONFIG_FUSE_FS=y
|
CONFIG_FUSE_FS=y
|
||||||
CONFIG_CUSE=m
|
CONFIG_CUSE=m
|
||||||
CONFIG_OVERLAY_FS=m
|
CONFIG_OVERLAY_FS=m
|
||||||
|
CONFIG_OVERLAY_FS_REDIRECT_DIR=y
|
||||||
CONFIG_FSCACHE=m
|
CONFIG_FSCACHE=m
|
||||||
CONFIG_CACHEFILES=m
|
CONFIG_CACHEFILES=m
|
||||||
CONFIG_ISO9660_FS=y
|
CONFIG_ISO9660_FS=y
|
||||||
|
@ -563,12 +560,16 @@ CONFIG_STACK_TRACER=y
|
||||||
CONFIG_BLK_DEV_IO_TRACE=y
|
CONFIG_BLK_DEV_IO_TRACE=y
|
||||||
CONFIG_UPROBE_EVENT=y
|
CONFIG_UPROBE_EVENT=y
|
||||||
CONFIG_FUNCTION_PROFILER=y
|
CONFIG_FUNCTION_PROFILER=y
|
||||||
|
CONFIG_HIST_TRIGGERS=y
|
||||||
CONFIG_TRACE_ENUM_MAP_FILE=y
|
CONFIG_TRACE_ENUM_MAP_FILE=y
|
||||||
CONFIG_LKDTM=m
|
CONFIG_LKDTM=m
|
||||||
CONFIG_PERCPU_TEST=m
|
CONFIG_PERCPU_TEST=m
|
||||||
CONFIG_ATOMIC64_SELFTEST=y
|
CONFIG_ATOMIC64_SELFTEST=y
|
||||||
CONFIG_TEST_BPF=m
|
CONFIG_TEST_BPF=m
|
||||||
|
CONFIG_BUG_ON_DATA_CORRUPTION=y
|
||||||
CONFIG_S390_PTDUMP=y
|
CONFIG_S390_PTDUMP=y
|
||||||
|
CONFIG_PERSISTENT_KEYRINGS=y
|
||||||
|
CONFIG_BIG_KEYS=y
|
||||||
CONFIG_ENCRYPTED_KEYS=m
|
CONFIG_ENCRYPTED_KEYS=m
|
||||||
CONFIG_SECURITY=y
|
CONFIG_SECURITY=y
|
||||||
CONFIG_SECURITY_NETWORK=y
|
CONFIG_SECURITY_NETWORK=y
|
||||||
|
@ -576,18 +577,25 @@ CONFIG_SECURITY_SELINUX=y
|
||||||
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
|
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
|
||||||
CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
|
CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
|
||||||
CONFIG_SECURITY_SELINUX_DISABLE=y
|
CONFIG_SECURITY_SELINUX_DISABLE=y
|
||||||
|
CONFIG_INTEGRITY_SIGNATURE=y
|
||||||
|
CONFIG_INTEGRITY_ASYMMETRIC_KEYS=y
|
||||||
CONFIG_IMA=y
|
CONFIG_IMA=y
|
||||||
|
CONFIG_IMA_WRITE_POLICY=y
|
||||||
CONFIG_IMA_APPRAISE=y
|
CONFIG_IMA_APPRAISE=y
|
||||||
|
CONFIG_CRYPTO_DH=m
|
||||||
|
CONFIG_CRYPTO_ECDH=m
|
||||||
CONFIG_CRYPTO_USER=m
|
CONFIG_CRYPTO_USER=m
|
||||||
# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
|
# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
|
||||||
|
CONFIG_CRYPTO_PCRYPT=m
|
||||||
CONFIG_CRYPTO_CRYPTD=m
|
CONFIG_CRYPTO_CRYPTD=m
|
||||||
|
CONFIG_CRYPTO_MCRYPTD=m
|
||||||
CONFIG_CRYPTO_TEST=m
|
CONFIG_CRYPTO_TEST=m
|
||||||
CONFIG_CRYPTO_CCM=m
|
CONFIG_CRYPTO_CCM=m
|
||||||
CONFIG_CRYPTO_GCM=m
|
CONFIG_CRYPTO_GCM=m
|
||||||
CONFIG_CRYPTO_CTS=m
|
CONFIG_CRYPTO_CHACHA20POLY1305=m
|
||||||
CONFIG_CRYPTO_LRW=m
|
CONFIG_CRYPTO_LRW=m
|
||||||
CONFIG_CRYPTO_PCBC=m
|
CONFIG_CRYPTO_PCBC=m
|
||||||
CONFIG_CRYPTO_XTS=m
|
CONFIG_CRYPTO_KEYWRAP=m
|
||||||
CONFIG_CRYPTO_XCBC=m
|
CONFIG_CRYPTO_XCBC=m
|
||||||
CONFIG_CRYPTO_VMAC=m
|
CONFIG_CRYPTO_VMAC=m
|
||||||
CONFIG_CRYPTO_CRC32=m
|
CONFIG_CRYPTO_CRC32=m
|
||||||
|
@ -597,6 +605,7 @@ CONFIG_CRYPTO_RMD160=m
|
||||||
CONFIG_CRYPTO_RMD256=m
|
CONFIG_CRYPTO_RMD256=m
|
||||||
CONFIG_CRYPTO_RMD320=m
|
CONFIG_CRYPTO_RMD320=m
|
||||||
CONFIG_CRYPTO_SHA512=m
|
CONFIG_CRYPTO_SHA512=m
|
||||||
|
CONFIG_CRYPTO_SHA3=m
|
||||||
CONFIG_CRYPTO_TGR192=m
|
CONFIG_CRYPTO_TGR192=m
|
||||||
CONFIG_CRYPTO_WP512=m
|
CONFIG_CRYPTO_WP512=m
|
||||||
CONFIG_CRYPTO_ANUBIS=m
|
CONFIG_CRYPTO_ANUBIS=m
|
||||||
|
@ -611,10 +620,13 @@ CONFIG_CRYPTO_SEED=m
|
||||||
CONFIG_CRYPTO_SERPENT=m
|
CONFIG_CRYPTO_SERPENT=m
|
||||||
CONFIG_CRYPTO_TEA=m
|
CONFIG_CRYPTO_TEA=m
|
||||||
CONFIG_CRYPTO_TWOFISH=m
|
CONFIG_CRYPTO_TWOFISH=m
|
||||||
|
CONFIG_CRYPTO_842=m
|
||||||
CONFIG_CRYPTO_LZ4=m
|
CONFIG_CRYPTO_LZ4=m
|
||||||
CONFIG_CRYPTO_LZ4HC=m
|
CONFIG_CRYPTO_LZ4HC=m
|
||||||
CONFIG_CRYPTO_USER_API_HASH=m
|
CONFIG_CRYPTO_USER_API_HASH=m
|
||||||
CONFIG_CRYPTO_USER_API_SKCIPHER=m
|
CONFIG_CRYPTO_USER_API_SKCIPHER=m
|
||||||
|
CONFIG_CRYPTO_USER_API_RNG=m
|
||||||
|
CONFIG_CRYPTO_USER_API_AEAD=m
|
||||||
CONFIG_ZCRYPT=m
|
CONFIG_ZCRYPT=m
|
||||||
CONFIG_CRYPTO_SHA1_S390=m
|
CONFIG_CRYPTO_SHA1_S390=m
|
||||||
CONFIG_CRYPTO_SHA256_S390=m
|
CONFIG_CRYPTO_SHA256_S390=m
|
||||||
|
@ -623,9 +635,6 @@ CONFIG_CRYPTO_DES_S390=m
|
||||||
CONFIG_CRYPTO_AES_S390=m
|
CONFIG_CRYPTO_AES_S390=m
|
||||||
CONFIG_CRYPTO_GHASH_S390=m
|
CONFIG_CRYPTO_GHASH_S390=m
|
||||||
CONFIG_CRYPTO_CRC32_S390=y
|
CONFIG_CRYPTO_CRC32_S390=y
|
||||||
CONFIG_ASYMMETRIC_KEY_TYPE=y
|
|
||||||
CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m
|
|
||||||
CONFIG_X509_CERTIFICATE_PARSER=m
|
|
||||||
CONFIG_CRC7=m
|
CONFIG_CRC7=m
|
||||||
CONFIG_CRC8=m
|
CONFIG_CRC8=m
|
||||||
CONFIG_CORDIC=m
|
CONFIG_CORDIC=m
|
||||||
|
|
|
@ -38,7 +38,6 @@ CONFIG_JUMP_LABEL=y
|
||||||
CONFIG_STATIC_KEYS_SELFTEST=y
|
CONFIG_STATIC_KEYS_SELFTEST=y
|
||||||
CONFIG_MODULES=y
|
CONFIG_MODULES=y
|
||||||
CONFIG_MODULE_UNLOAD=y
|
CONFIG_MODULE_UNLOAD=y
|
||||||
CONFIG_MODVERSIONS=y
|
|
||||||
CONFIG_BLK_DEV_INTEGRITY=y
|
CONFIG_BLK_DEV_INTEGRITY=y
|
||||||
CONFIG_PARTITION_ADVANCED=y
|
CONFIG_PARTITION_ADVANCED=y
|
||||||
CONFIG_IBM_PARTITION=y
|
CONFIG_IBM_PARTITION=y
|
||||||
|
@ -130,8 +129,11 @@ CONFIG_DUMMY=m
|
||||||
CONFIG_EQUALIZER=m
|
CONFIG_EQUALIZER=m
|
||||||
CONFIG_TUN=m
|
CONFIG_TUN=m
|
||||||
CONFIG_VIRTIO_NET=y
|
CONFIG_VIRTIO_NET=y
|
||||||
|
# CONFIG_NET_VENDOR_ALACRITECH is not set
|
||||||
|
# CONFIG_NET_VENDOR_SOLARFLARE is not set
|
||||||
# CONFIG_INPUT is not set
|
# CONFIG_INPUT is not set
|
||||||
# CONFIG_SERIO is not set
|
# CONFIG_SERIO is not set
|
||||||
|
CONFIG_DEVKMEM=y
|
||||||
CONFIG_RAW_DRIVER=m
|
CONFIG_RAW_DRIVER=m
|
||||||
CONFIG_VIRTIO_BALLOON=y
|
CONFIG_VIRTIO_BALLOON=y
|
||||||
CONFIG_EXT4_FS=y
|
CONFIG_EXT4_FS=y
|
||||||
|
@ -183,7 +185,6 @@ CONFIG_TRACE_ENUM_MAP_FILE=y
|
||||||
CONFIG_KPROBES_SANITY_TEST=y
|
CONFIG_KPROBES_SANITY_TEST=y
|
||||||
CONFIG_S390_PTDUMP=y
|
CONFIG_S390_PTDUMP=y
|
||||||
CONFIG_CRYPTO_CRYPTD=m
|
CONFIG_CRYPTO_CRYPTD=m
|
||||||
CONFIG_CRYPTO_AUTHENC=m
|
|
||||||
CONFIG_CRYPTO_TEST=m
|
CONFIG_CRYPTO_TEST=m
|
||||||
CONFIG_CRYPTO_CCM=m
|
CONFIG_CRYPTO_CCM=m
|
||||||
CONFIG_CRYPTO_GCM=m
|
CONFIG_CRYPTO_GCM=m
|
||||||
|
|
|
@ -15,7 +15,9 @@
|
||||||
BUILD_BUG_ON(sizeof(addrtype) != (high - low + 1) * sizeof(long));\
|
BUILD_BUG_ON(sizeof(addrtype) != (high - low + 1) * sizeof(long));\
|
||||||
asm volatile( \
|
asm volatile( \
|
||||||
" lctlg %1,%2,%0\n" \
|
" lctlg %1,%2,%0\n" \
|
||||||
: : "Q" (*(addrtype *)(&array)), "i" (low), "i" (high));\
|
: \
|
||||||
|
: "Q" (*(addrtype *)(&array)), "i" (low), "i" (high) \
|
||||||
|
: "memory"); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define __ctl_store(array, low, high) { \
|
#define __ctl_store(array, low, high) { \
|
||||||
|
|
|
@ -916,7 +916,7 @@ static int kvm_s390_get_machine(struct kvm *kvm, struct kvm_device_attr *attr)
|
||||||
memcpy(&mach->fac_mask, kvm->arch.model.fac_mask,
|
memcpy(&mach->fac_mask, kvm->arch.model.fac_mask,
|
||||||
S390_ARCH_FAC_LIST_SIZE_BYTE);
|
S390_ARCH_FAC_LIST_SIZE_BYTE);
|
||||||
memcpy((unsigned long *)&mach->fac_list, S390_lowcore.stfle_fac_list,
|
memcpy((unsigned long *)&mach->fac_list, S390_lowcore.stfle_fac_list,
|
||||||
S390_ARCH_FAC_LIST_SIZE_BYTE);
|
sizeof(S390_lowcore.stfle_fac_list));
|
||||||
if (copy_to_user((void __user *)attr->addr, mach, sizeof(*mach)))
|
if (copy_to_user((void __user *)attr->addr, mach, sizeof(*mach)))
|
||||||
ret = -EFAULT;
|
ret = -EFAULT;
|
||||||
kfree(mach);
|
kfree(mach);
|
||||||
|
@ -1437,7 +1437,7 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
|
||||||
|
|
||||||
/* Populate the facility mask initially. */
|
/* Populate the facility mask initially. */
|
||||||
memcpy(kvm->arch.model.fac_mask, S390_lowcore.stfle_fac_list,
|
memcpy(kvm->arch.model.fac_mask, S390_lowcore.stfle_fac_list,
|
||||||
S390_ARCH_FAC_LIST_SIZE_BYTE);
|
sizeof(S390_lowcore.stfle_fac_list));
|
||||||
for (i = 0; i < S390_ARCH_FAC_LIST_SIZE_U64; i++) {
|
for (i = 0; i < S390_ARCH_FAC_LIST_SIZE_U64; i++) {
|
||||||
if (i < kvm_s390_fac_list_mask_size())
|
if (i < kvm_s390_fac_list_mask_size())
|
||||||
kvm->arch.model.fac_mask[i] &= kvm_s390_fac_list_mask[i];
|
kvm->arch.model.fac_mask[i] &= kvm_s390_fac_list_mask[i];
|
||||||
|
|
|
@ -111,7 +111,7 @@ static int tile_gpr_set(struct task_struct *target,
|
||||||
const void *kbuf, const void __user *ubuf)
|
const void *kbuf, const void __user *ubuf)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct pt_regs regs;
|
struct pt_regs regs = *task_pt_regs(target);
|
||||||
|
|
||||||
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, ®s, 0,
|
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, ®s, 0,
|
||||||
sizeof(regs));
|
sizeof(regs));
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include "ctype.h"
|
#include "ctype.h"
|
||||||
|
#include "string.h"
|
||||||
|
|
||||||
int memcmp(const void *s1, const void *s2, size_t len)
|
int memcmp(const void *s1, const void *s2, size_t len)
|
||||||
{
|
{
|
||||||
|
|
|
@ -18,4 +18,13 @@ int memcmp(const void *s1, const void *s2, size_t len);
|
||||||
#define memset(d,c,l) __builtin_memset(d,c,l)
|
#define memset(d,c,l) __builtin_memset(d,c,l)
|
||||||
#define memcmp __builtin_memcmp
|
#define memcmp __builtin_memcmp
|
||||||
|
|
||||||
|
extern int strcmp(const char *str1, const char *str2);
|
||||||
|
extern int strncmp(const char *cs, const char *ct, size_t count);
|
||||||
|
extern size_t strlen(const char *s);
|
||||||
|
extern char *strstr(const char *s1, const char *s2);
|
||||||
|
extern size_t strnlen(const char *s, size_t maxlen);
|
||||||
|
extern unsigned int atou(const char *s);
|
||||||
|
extern unsigned long long simple_strtoull(const char *cp, char **endp,
|
||||||
|
unsigned int base);
|
||||||
|
|
||||||
#endif /* BOOT_STRING_H */
|
#endif /* BOOT_STRING_H */
|
||||||
|
|
|
@ -1020,7 +1020,8 @@ struct {
|
||||||
const char *basename;
|
const char *basename;
|
||||||
struct simd_skcipher_alg *simd;
|
struct simd_skcipher_alg *simd;
|
||||||
} aesni_simd_skciphers2[] = {
|
} aesni_simd_skciphers2[] = {
|
||||||
#if IS_ENABLED(CONFIG_CRYPTO_PCBC)
|
#if (defined(MODULE) && IS_ENABLED(CONFIG_CRYPTO_PCBC)) || \
|
||||||
|
IS_BUILTIN(CONFIG_CRYPTO_PCBC)
|
||||||
{
|
{
|
||||||
.algname = "pcbc(aes)",
|
.algname = "pcbc(aes)",
|
||||||
.drvname = "pcbc-aes-aesni",
|
.drvname = "pcbc-aes-aesni",
|
||||||
|
|
|
@ -254,23 +254,6 @@ ENTRY(__switch_to_asm)
|
||||||
jmp __switch_to
|
jmp __switch_to
|
||||||
END(__switch_to_asm)
|
END(__switch_to_asm)
|
||||||
|
|
||||||
/*
|
|
||||||
* The unwinder expects the last frame on the stack to always be at the same
|
|
||||||
* offset from the end of the page, which allows it to validate the stack.
|
|
||||||
* Calling schedule_tail() directly would break that convention because its an
|
|
||||||
* asmlinkage function so its argument has to be pushed on the stack. This
|
|
||||||
* wrapper creates a proper "end of stack" frame header before the call.
|
|
||||||
*/
|
|
||||||
ENTRY(schedule_tail_wrapper)
|
|
||||||
FRAME_BEGIN
|
|
||||||
|
|
||||||
pushl %eax
|
|
||||||
call schedule_tail
|
|
||||||
popl %eax
|
|
||||||
|
|
||||||
FRAME_END
|
|
||||||
ret
|
|
||||||
ENDPROC(schedule_tail_wrapper)
|
|
||||||
/*
|
/*
|
||||||
* A newly forked process directly context switches into this address.
|
* A newly forked process directly context switches into this address.
|
||||||
*
|
*
|
||||||
|
@ -279,15 +262,24 @@ ENDPROC(schedule_tail_wrapper)
|
||||||
* edi: kernel thread arg
|
* edi: kernel thread arg
|
||||||
*/
|
*/
|
||||||
ENTRY(ret_from_fork)
|
ENTRY(ret_from_fork)
|
||||||
call schedule_tail_wrapper
|
FRAME_BEGIN /* help unwinder find end of stack */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* schedule_tail() is asmlinkage so we have to put its 'prev' argument
|
||||||
|
* on the stack.
|
||||||
|
*/
|
||||||
|
pushl %eax
|
||||||
|
call schedule_tail
|
||||||
|
popl %eax
|
||||||
|
|
||||||
testl %ebx, %ebx
|
testl %ebx, %ebx
|
||||||
jnz 1f /* kernel threads are uncommon */
|
jnz 1f /* kernel threads are uncommon */
|
||||||
|
|
||||||
2:
|
2:
|
||||||
/* When we fork, we trace the syscall return in the child, too. */
|
/* When we fork, we trace the syscall return in the child, too. */
|
||||||
movl %esp, %eax
|
leal FRAME_OFFSET(%esp), %eax
|
||||||
call syscall_return_slowpath
|
call syscall_return_slowpath
|
||||||
|
FRAME_END
|
||||||
jmp restore_all
|
jmp restore_all
|
||||||
|
|
||||||
/* kernel thread */
|
/* kernel thread */
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
#include <asm/smap.h>
|
#include <asm/smap.h>
|
||||||
#include <asm/pgtable_types.h>
|
#include <asm/pgtable_types.h>
|
||||||
#include <asm/export.h>
|
#include <asm/export.h>
|
||||||
|
#include <asm/frame.h>
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
|
|
||||||
.code64
|
.code64
|
||||||
|
@ -408,6 +409,7 @@ END(__switch_to_asm)
|
||||||
* r12: kernel thread arg
|
* r12: kernel thread arg
|
||||||
*/
|
*/
|
||||||
ENTRY(ret_from_fork)
|
ENTRY(ret_from_fork)
|
||||||
|
FRAME_BEGIN /* help unwinder find end of stack */
|
||||||
movq %rax, %rdi
|
movq %rax, %rdi
|
||||||
call schedule_tail /* rdi: 'prev' task parameter */
|
call schedule_tail /* rdi: 'prev' task parameter */
|
||||||
|
|
||||||
|
@ -415,10 +417,11 @@ ENTRY(ret_from_fork)
|
||||||
jnz 1f /* kernel threads are uncommon */
|
jnz 1f /* kernel threads are uncommon */
|
||||||
|
|
||||||
2:
|
2:
|
||||||
movq %rsp, %rdi
|
leaq FRAME_OFFSET(%rsp),%rdi /* pt_regs pointer */
|
||||||
call syscall_return_slowpath /* returns with IRQs disabled */
|
call syscall_return_slowpath /* returns with IRQs disabled */
|
||||||
TRACE_IRQS_ON /* user mode is traced as IRQS on */
|
TRACE_IRQS_ON /* user mode is traced as IRQS on */
|
||||||
SWAPGS
|
SWAPGS
|
||||||
|
FRAME_END
|
||||||
jmp restore_regs_and_iret
|
jmp restore_regs_and_iret
|
||||||
|
|
||||||
1:
|
1:
|
||||||
|
|
|
@ -1010,7 +1010,7 @@ static __init int amd_ibs_init(void)
|
||||||
* all online cpus.
|
* all online cpus.
|
||||||
*/
|
*/
|
||||||
cpuhp_setup_state(CPUHP_AP_PERF_X86_AMD_IBS_STARTING,
|
cpuhp_setup_state(CPUHP_AP_PERF_X86_AMD_IBS_STARTING,
|
||||||
"perf/x86/amd/ibs:STARTING",
|
"perf/x86/amd/ibs:starting",
|
||||||
x86_pmu_amd_ibs_starting_cpu,
|
x86_pmu_amd_ibs_starting_cpu,
|
||||||
x86_pmu_amd_ibs_dying_cpu);
|
x86_pmu_amd_ibs_dying_cpu);
|
||||||
|
|
||||||
|
|
|
@ -505,6 +505,10 @@ int x86_pmu_hw_config(struct perf_event *event)
|
||||||
|
|
||||||
if (event->attr.precise_ip > precise)
|
if (event->attr.precise_ip > precise)
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
|
/* There's no sense in having PEBS for non sampling events: */
|
||||||
|
if (!is_sampling_event(event))
|
||||||
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* check that PEBS LBR correction does not conflict with
|
* check that PEBS LBR correction does not conflict with
|
||||||
|
|
|
@ -3176,12 +3176,15 @@ static void intel_pmu_cpu_starting(int cpu)
|
||||||
|
|
||||||
if (x86_pmu.flags & PMU_FL_EXCL_CNTRS) {
|
if (x86_pmu.flags & PMU_FL_EXCL_CNTRS) {
|
||||||
for_each_cpu(i, topology_sibling_cpumask(cpu)) {
|
for_each_cpu(i, topology_sibling_cpumask(cpu)) {
|
||||||
|
struct cpu_hw_events *sibling;
|
||||||
struct intel_excl_cntrs *c;
|
struct intel_excl_cntrs *c;
|
||||||
|
|
||||||
c = per_cpu(cpu_hw_events, i).excl_cntrs;
|
sibling = &per_cpu(cpu_hw_events, i);
|
||||||
|
c = sibling->excl_cntrs;
|
||||||
if (c && c->core_id == core_id) {
|
if (c && c->core_id == core_id) {
|
||||||
cpuc->kfree_on_online[1] = cpuc->excl_cntrs;
|
cpuc->kfree_on_online[1] = cpuc->excl_cntrs;
|
||||||
cpuc->excl_cntrs = c;
|
cpuc->excl_cntrs = c;
|
||||||
|
if (!sibling->excl_thread_id)
|
||||||
cpuc->excl_thread_id = 1;
|
cpuc->excl_thread_id = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -3987,7 +3990,7 @@ __init int intel_pmu_init(void)
|
||||||
x86_pmu.num_counters, INTEL_PMC_MAX_GENERIC);
|
x86_pmu.num_counters, INTEL_PMC_MAX_GENERIC);
|
||||||
x86_pmu.num_counters = INTEL_PMC_MAX_GENERIC;
|
x86_pmu.num_counters = INTEL_PMC_MAX_GENERIC;
|
||||||
}
|
}
|
||||||
x86_pmu.intel_ctrl = (1 << x86_pmu.num_counters) - 1;
|
x86_pmu.intel_ctrl = (1ULL << x86_pmu.num_counters) - 1;
|
||||||
|
|
||||||
if (x86_pmu.num_counters_fixed > INTEL_PMC_MAX_FIXED) {
|
if (x86_pmu.num_counters_fixed > INTEL_PMC_MAX_FIXED) {
|
||||||
WARN(1, KERN_ERR "hw perf events fixed %d > max(%d), clipping!",
|
WARN(1, KERN_ERR "hw perf events fixed %d > max(%d), clipping!",
|
||||||
|
|
|
@ -434,6 +434,7 @@ static struct pmu cstate_core_pmu = {
|
||||||
.stop = cstate_pmu_event_stop,
|
.stop = cstate_pmu_event_stop,
|
||||||
.read = cstate_pmu_event_update,
|
.read = cstate_pmu_event_update,
|
||||||
.capabilities = PERF_PMU_CAP_NO_INTERRUPT,
|
.capabilities = PERF_PMU_CAP_NO_INTERRUPT,
|
||||||
|
.module = THIS_MODULE,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct pmu cstate_pkg_pmu = {
|
static struct pmu cstate_pkg_pmu = {
|
||||||
|
@ -447,6 +448,7 @@ static struct pmu cstate_pkg_pmu = {
|
||||||
.stop = cstate_pmu_event_stop,
|
.stop = cstate_pmu_event_stop,
|
||||||
.read = cstate_pmu_event_update,
|
.read = cstate_pmu_event_update,
|
||||||
.capabilities = PERF_PMU_CAP_NO_INTERRUPT,
|
.capabilities = PERF_PMU_CAP_NO_INTERRUPT,
|
||||||
|
.module = THIS_MODULE,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct cstate_model nhm_cstates __initconst = {
|
static const struct cstate_model nhm_cstates __initconst = {
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue