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