forked from mirrors/linux
		
	Merge branch 'linus' into x86/mm, to pick up fixes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
		
						commit
						a4eb8b9935
					
				
					 490 changed files with 4490 additions and 3165 deletions
				
			
		| 
						 | 
					@ -3811,6 +3811,13 @@
 | 
				
			||||||
			expediting.  Set to zero to disable automatic
 | 
								expediting.  Set to zero to disable automatic
 | 
				
			||||||
			expediting.
 | 
								expediting.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						stack_guard_gap=	[MM]
 | 
				
			||||||
 | 
								override the default stack gap protection. The value
 | 
				
			||||||
 | 
								is in page units and it defines how many pages prior
 | 
				
			||||||
 | 
								to (for stacks growing down) resp. after (for stacks
 | 
				
			||||||
 | 
								growing up) the main stack are reserved for no other
 | 
				
			||||||
 | 
								mapping. Default value is 256 pages.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	stacktrace	[FTRACE]
 | 
						stacktrace	[FTRACE]
 | 
				
			||||||
			Enabled the stack tracer on boot up.
 | 
								Enabled the stack tracer on boot up.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,8 @@ Required properties :
 | 
				
			||||||
- #clock-cells : must contain 1
 | 
					- #clock-cells : must contain 1
 | 
				
			||||||
- #reset-cells : must contain 1
 | 
					- #reset-cells : must contain 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
For the PRCM CCUs on H3/A64, one more clock is needed:
 | 
					For the PRCM CCUs on H3/A64, two more clocks are needed:
 | 
				
			||||||
 | 
					- "pll-periph": the SoC's peripheral PLL from the main CCU
 | 
				
			||||||
- "iosc": the SoC's internal frequency oscillator
 | 
					- "iosc": the SoC's internal frequency oscillator
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Example for generic CCU:
 | 
					Example for generic CCU:
 | 
				
			||||||
| 
						 | 
					@ -39,8 +40,8 @@ Example for PRCM CCU:
 | 
				
			||||||
r_ccu: clock@01f01400 {
 | 
					r_ccu: clock@01f01400 {
 | 
				
			||||||
	compatible = "allwinner,sun50i-a64-r-ccu";
 | 
						compatible = "allwinner,sun50i-a64-r-ccu";
 | 
				
			||||||
	reg = <0x01f01400 0x100>;
 | 
						reg = <0x01f01400 0x100>;
 | 
				
			||||||
	clocks = <&osc24M>, <&osc32k>, <&iosc>;
 | 
						clocks = <&osc24M>, <&osc32k>, <&iosc>, <&ccu CLK_PLL_PERIPH0>;
 | 
				
			||||||
	clock-names = "hosc", "losc", "iosc";
 | 
						clock-names = "hosc", "losc", "iosc", "pll-periph";
 | 
				
			||||||
	#clock-cells = <1>;
 | 
						#clock-cells = <1>;
 | 
				
			||||||
	#reset-cells = <1>;
 | 
						#reset-cells = <1>;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,7 +34,7 @@ Required properties:
 | 
				
			||||||
      "brcm,bcm6328-switch"
 | 
					      "brcm,bcm6328-switch"
 | 
				
			||||||
      "brcm,bcm6368-switch" and the mandatory "brcm,bcm63xx-switch"
 | 
					      "brcm,bcm6368-switch" and the mandatory "brcm,bcm63xx-switch"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See Documentation/devicetree/bindings/dsa/dsa.txt for a list of additional
 | 
					See Documentation/devicetree/bindings/net/dsa/dsa.txt for a list of additional
 | 
				
			||||||
required and optional properties.
 | 
					required and optional properties.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Examples:
 | 
					Examples:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -27,6 +27,7 @@ Optional properties:
 | 
				
			||||||
  of the device. On many systems this is wired high so the device goes
 | 
					  of the device. On many systems this is wired high so the device goes
 | 
				
			||||||
  out of reset at power-on, but if it is under program control, this
 | 
					  out of reset at power-on, but if it is under program control, this
 | 
				
			||||||
  optional GPIO can wake up in response to it.
 | 
					  optional GPIO can wake up in response to it.
 | 
				
			||||||
 | 
					- vdd33a-supply, vddvario-supply : 3.3V analog and IO logic power supplies
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Examples:
 | 
					Examples:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,6 +10,7 @@ Required properties:
 | 
				
			||||||
  - "rockchip,rk3288-usb", "rockchip,rk3066-usb", "snps,dwc2": for rk3288 Soc;
 | 
					  - "rockchip,rk3288-usb", "rockchip,rk3066-usb", "snps,dwc2": for rk3288 Soc;
 | 
				
			||||||
  - "lantiq,arx100-usb": The DWC2 USB controller instance in Lantiq ARX SoCs;
 | 
					  - "lantiq,arx100-usb": The DWC2 USB controller instance in Lantiq ARX SoCs;
 | 
				
			||||||
  - "lantiq,xrx200-usb": The DWC2 USB controller instance in Lantiq XRX SoCs;
 | 
					  - "lantiq,xrx200-usb": The DWC2 USB controller instance in Lantiq XRX SoCs;
 | 
				
			||||||
 | 
					  - "amlogic,meson8-usb": The DWC2 USB controller instance in Amlogic Meson8 SoCs;
 | 
				
			||||||
  - "amlogic,meson8b-usb": The DWC2 USB controller instance in Amlogic Meson8b SoCs;
 | 
					  - "amlogic,meson8b-usb": The DWC2 USB controller instance in Amlogic Meson8b SoCs;
 | 
				
			||||||
  - "amlogic,meson-gxbb-usb": The DWC2 USB controller instance in Amlogic S905 SoCs;
 | 
					  - "amlogic,meson-gxbb-usb": The DWC2 USB controller instance in Amlogic S905 SoCs;
 | 
				
			||||||
  - "amcc,dwc-otg": The DWC2 USB controller instance in AMCC Canyonlands 460EX SoCs;
 | 
					  - "amcc,dwc-otg": The DWC2 USB controller instance in AMCC Canyonlands 460EX SoCs;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -122,7 +122,7 @@ associated flow of the packet. The hash is either provided by hardware
 | 
				
			||||||
or will be computed in the stack. Capable hardware can pass the hash in
 | 
					or will be computed in the stack. Capable hardware can pass the hash in
 | 
				
			||||||
the receive descriptor for the packet; this would usually be the same
 | 
					the receive descriptor for the packet; this would usually be the same
 | 
				
			||||||
hash used for RSS (e.g. computed Toeplitz hash). The hash is saved in
 | 
					hash used for RSS (e.g. computed Toeplitz hash). The hash is saved in
 | 
				
			||||||
skb->rx_hash and can be used elsewhere in the stack as a hash of the
 | 
					skb->hash and can be used elsewhere in the stack as a hash of the
 | 
				
			||||||
packet’s flow.
 | 
					packet’s flow.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Each receive hardware queue has an associated list of CPUs to which
 | 
					Each receive hardware queue has an associated list of CPUs to which
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5622,7 +5622,7 @@ F:	scripts/get_maintainer.pl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GENWQE (IBM Generic Workqueue Card)
 | 
					GENWQE (IBM Generic Workqueue Card)
 | 
				
			||||||
M:	Frank Haverkamp <haver@linux.vnet.ibm.com>
 | 
					M:	Frank Haverkamp <haver@linux.vnet.ibm.com>
 | 
				
			||||||
M:	Gabriel Krisman Bertazi <krisman@linux.vnet.ibm.com>
 | 
					M:	Guilherme G. Piccoli <gpiccoli@linux.vnet.ibm.com>
 | 
				
			||||||
S:	Supported
 | 
					S:	Supported
 | 
				
			||||||
F:	drivers/misc/genwqe/
 | 
					F:	drivers/misc/genwqe/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5667,7 +5667,6 @@ F:	tools/testing/selftests/gpio/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GPIO SUBSYSTEM
 | 
					GPIO SUBSYSTEM
 | 
				
			||||||
M:	Linus Walleij <linus.walleij@linaro.org>
 | 
					M:	Linus Walleij <linus.walleij@linaro.org>
 | 
				
			||||||
M:	Alexandre Courbot <gnurou@gmail.com>
 | 
					 | 
				
			||||||
L:	linux-gpio@vger.kernel.org
 | 
					L:	linux-gpio@vger.kernel.org
 | 
				
			||||||
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio.git
 | 
					T:	git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio.git
 | 
				
			||||||
S:	Maintained
 | 
					S:	Maintained
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
VERSION = 4
 | 
					VERSION = 4
 | 
				
			||||||
PATCHLEVEL = 12
 | 
					PATCHLEVEL = 12
 | 
				
			||||||
SUBLEVEL = 0
 | 
					SUBLEVEL = 0
 | 
				
			||||||
EXTRAVERSION = -rc4
 | 
					EXTRAVERSION = -rc6
 | 
				
			||||||
NAME = Fearless Coyote
 | 
					NAME = Fearless Coyote
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# *DOCUMENTATION*
 | 
					# *DOCUMENTATION*
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -65,7 +65,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		vma = find_vma(mm, addr);
 | 
							vma = find_vma(mm, addr);
 | 
				
			||||||
		if (TASK_SIZE - len >= addr &&
 | 
							if (TASK_SIZE - len >= addr &&
 | 
				
			||||||
		    (!vma || addr + len <= vma->vm_start))
 | 
							    (!vma || addr + len <= vm_start_gap(vma)))
 | 
				
			||||||
			return addr;
 | 
								return addr;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -220,7 +220,7 @@ AM33XX_IOPAD(0x94c, PIN_INPUT_PULLDOWN | MUX_MODE7)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mmc1_pins: pinmux_mmc1_pins {
 | 
						mmc1_pins: pinmux_mmc1_pins {
 | 
				
			||||||
		pinctrl-single,pins = <
 | 
							pinctrl-single,pins = <
 | 
				
			||||||
			AM33XX_IOPAD(0x960, PIN_INPUT | MUX_MODE7)		/* spi0_cs1.gpio0_6 */
 | 
								AM33XX_IOPAD(0x96c, PIN_INPUT | MUX_MODE7)		/* uart0_rtsn.gpio1_9 */
 | 
				
			||||||
		>;
 | 
							>;
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -280,10 +280,6 @@ AM33XX_IOPAD(0x830, PIN_INPUT_PULLUP | MUX_MODE7)	/* nKbdInt - gpmc_ad12.gpio1_1
 | 
				
			||||||
			AM33XX_IOPAD(0x834, PIN_INPUT_PULLUP | MUX_MODE7)	/* nKbdReset - gpmc_ad13.gpio1_13 */
 | 
								AM33XX_IOPAD(0x834, PIN_INPUT_PULLUP | MUX_MODE7)	/* nKbdReset - gpmc_ad13.gpio1_13 */
 | 
				
			||||||
			AM33XX_IOPAD(0x838, PIN_INPUT_PULLUP | MUX_MODE7)	/* nDispReset - gpmc_ad14.gpio1_14 */
 | 
								AM33XX_IOPAD(0x838, PIN_INPUT_PULLUP | MUX_MODE7)	/* nDispReset - gpmc_ad14.gpio1_14 */
 | 
				
			||||||
			AM33XX_IOPAD(0x844, PIN_INPUT_PULLUP | MUX_MODE7)	/* USB1_enPower - gpmc_a1.gpio1_17 */
 | 
								AM33XX_IOPAD(0x844, PIN_INPUT_PULLUP | MUX_MODE7)	/* USB1_enPower - gpmc_a1.gpio1_17 */
 | 
				
			||||||
			/* AVR Programming - SPI Bus (bit bang) - Screen and Keyboard */
 | 
					 | 
				
			||||||
			AM33XX_IOPAD(0x954, PIN_INPUT_PULLUP | MUX_MODE7)	/* Kbd/Disp/BattMOSI spi0_d0.gpio0_3 */
 | 
					 | 
				
			||||||
			AM33XX_IOPAD(0x958, PIN_INPUT_PULLUP | MUX_MODE7)	/* Kbd/Disp/BattMISO spi0_d1.gpio0_4 */
 | 
					 | 
				
			||||||
			AM33XX_IOPAD(0x950, PIN_INPUT_PULLUP | MUX_MODE7)	/* Kbd/Disp/BattSCLK spi0_clk.gpio0_2 */
 | 
					 | 
				
			||||||
			/* PDI Bus - Battery system */
 | 
								/* PDI Bus - Battery system */
 | 
				
			||||||
			AM33XX_IOPAD(0x840, PIN_INPUT_PULLUP | MUX_MODE7)	/* nBattReset  gpmc_a0.gpio1_16 */
 | 
								AM33XX_IOPAD(0x840, PIN_INPUT_PULLUP | MUX_MODE7)	/* nBattReset  gpmc_a0.gpio1_16 */
 | 
				
			||||||
			AM33XX_IOPAD(0x83c, PIN_INPUT_PULLUP | MUX_MODE7)	/* BattPDIData gpmc_ad15.gpio1_15 */
 | 
								AM33XX_IOPAD(0x83c, PIN_INPUT_PULLUP | MUX_MODE7)	/* BattPDIData gpmc_ad15.gpio1_15 */
 | 
				
			||||||
| 
						 | 
					@ -384,7 +380,7 @@ &mmc1 {
 | 
				
			||||||
	pinctrl-names = "default";
 | 
						pinctrl-names = "default";
 | 
				
			||||||
	pinctrl-0 = <&mmc1_pins>;
 | 
						pinctrl-0 = <&mmc1_pins>;
 | 
				
			||||||
	bus-width = <4>;
 | 
						bus-width = <4>;
 | 
				
			||||||
	cd-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
 | 
						cd-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
 | 
				
			||||||
	vmmc-supply = <&vmmcsd_fixed>;
 | 
						vmmc-supply = <&vmmcsd_fixed>;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -558,10 +558,11 @@ rtc: rtc@01f00000 {
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		r_ccu: clock@1f01400 {
 | 
							r_ccu: clock@1f01400 {
 | 
				
			||||||
			compatible = "allwinner,sun50i-a64-r-ccu";
 | 
								compatible = "allwinner,sun8i-h3-r-ccu";
 | 
				
			||||||
			reg = <0x01f01400 0x100>;
 | 
								reg = <0x01f01400 0x100>;
 | 
				
			||||||
			clocks = <&osc24M>, <&osc32k>, <&iosc>;
 | 
								clocks = <&osc24M>, <&osc32k>, <&iosc>,
 | 
				
			||||||
			clock-names = "hosc", "losc", "iosc";
 | 
									 <&ccu 9>;
 | 
				
			||||||
 | 
								clock-names = "hosc", "losc", "iosc", "pll-periph";
 | 
				
			||||||
			#clock-cells = <1>;
 | 
								#clock-cells = <1>;
 | 
				
			||||||
			#reset-cells = <1>;
 | 
								#reset-cells = <1>;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -104,7 +104,6 @@ __do_hyp_init:
 | 
				
			||||||
	@  - Write permission implies XN: disabled
 | 
						@  - Write permission implies XN: disabled
 | 
				
			||||||
	@  - Instruction cache: enabled
 | 
						@  - Instruction cache: enabled
 | 
				
			||||||
	@  - Data/Unified cache: enabled
 | 
						@  - Data/Unified cache: enabled
 | 
				
			||||||
	@  - Memory alignment checks: enabled
 | 
					 | 
				
			||||||
	@  - MMU: enabled (this code must be run from an identity mapping)
 | 
						@  - MMU: enabled (this code must be run from an identity mapping)
 | 
				
			||||||
	mrc	p15, 4, r0, c1, c0, 0	@ HSCR
 | 
						mrc	p15, 4, r0, c1, c0, 0	@ HSCR
 | 
				
			||||||
	ldr	r2, =HSCTLR_MASK
 | 
						ldr	r2, =HSCTLR_MASK
 | 
				
			||||||
| 
						 | 
					@ -112,8 +111,8 @@ __do_hyp_init:
 | 
				
			||||||
	mrc	p15, 0, r1, c1, c0, 0	@ SCTLR
 | 
						mrc	p15, 0, r1, c1, c0, 0	@ SCTLR
 | 
				
			||||||
	ldr	r2, =(HSCTLR_EE | HSCTLR_FI | HSCTLR_I | HSCTLR_C)
 | 
						ldr	r2, =(HSCTLR_EE | HSCTLR_FI | HSCTLR_I | HSCTLR_C)
 | 
				
			||||||
	and	r1, r1, r2
 | 
						and	r1, r1, r2
 | 
				
			||||||
 ARM(	ldr	r2, =(HSCTLR_M | HSCTLR_A)			)
 | 
					 ARM(	ldr	r2, =(HSCTLR_M)					)
 | 
				
			||||||
 THUMB(	ldr	r2, =(HSCTLR_M | HSCTLR_A | HSCTLR_TE)		)
 | 
					 THUMB(	ldr	r2, =(HSCTLR_M | HSCTLR_TE)			)
 | 
				
			||||||
	orr	r1, r1, r2
 | 
						orr	r1, r1, r2
 | 
				
			||||||
	orr	r0, r0, r1
 | 
						orr	r0, r0, r1
 | 
				
			||||||
	mcr	p15, 4, r0, c1, c0, 0	@ HSCR
 | 
						mcr	p15, 4, r0, c1, c0, 0	@ HSCR
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -90,7 +90,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		vma = find_vma(mm, addr);
 | 
							vma = find_vma(mm, addr);
 | 
				
			||||||
		if (TASK_SIZE - len >= addr &&
 | 
							if (TASK_SIZE - len >= addr &&
 | 
				
			||||||
		    (!vma || addr + len <= vma->vm_start))
 | 
							    (!vma || addr + len <= vm_start_gap(vma)))
 | 
				
			||||||
			return addr;
 | 
								return addr;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -141,7 +141,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
 | 
				
			||||||
			addr = PAGE_ALIGN(addr);
 | 
								addr = PAGE_ALIGN(addr);
 | 
				
			||||||
		vma = find_vma(mm, addr);
 | 
							vma = find_vma(mm, addr);
 | 
				
			||||||
		if (TASK_SIZE - len >= addr &&
 | 
							if (TASK_SIZE - len >= addr &&
 | 
				
			||||||
				(!vma || addr + len <= vma->vm_start))
 | 
									(!vma || addr + len <= vm_start_gap(vma)))
 | 
				
			||||||
			return addr;
 | 
								return addr;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1084,10 +1084,6 @@ config SYSVIPC_COMPAT
 | 
				
			||||||
	def_bool y
 | 
						def_bool y
 | 
				
			||||||
	depends on COMPAT && SYSVIPC
 | 
						depends on COMPAT && SYSVIPC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config KEYS_COMPAT
 | 
					 | 
				
			||||||
	def_bool y
 | 
					 | 
				
			||||||
	depends on COMPAT && KEYS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
endmenu
 | 
					endmenu
 | 
				
			||||||
 | 
					
 | 
				
			||||||
menu "Power management options"
 | 
					menu "Power management options"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -406,8 +406,9 @@ rtc: rtc@1f00000 {
 | 
				
			||||||
		r_ccu: clock@1f01400 {
 | 
							r_ccu: clock@1f01400 {
 | 
				
			||||||
			compatible = "allwinner,sun50i-a64-r-ccu";
 | 
								compatible = "allwinner,sun50i-a64-r-ccu";
 | 
				
			||||||
			reg = <0x01f01400 0x100>;
 | 
								reg = <0x01f01400 0x100>;
 | 
				
			||||||
			clocks = <&osc24M>, <&osc32k>, <&iosc>;
 | 
								clocks = <&osc24M>, <&osc32k>, <&iosc>,
 | 
				
			||||||
			clock-names = "hosc", "losc", "iosc";
 | 
									 <&ccu 11>;
 | 
				
			||||||
 | 
								clock-names = "hosc", "losc", "iosc", "pll-periph";
 | 
				
			||||||
			#clock-cells = <1>;
 | 
								#clock-cells = <1>;
 | 
				
			||||||
			#reset-cells = <1>;
 | 
								#reset-cells = <1>;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,7 +40,7 @@
 | 
				
			||||||
 *     OTHER DEALINGS IN THE SOFTWARE.
 | 
					 *     OTHER DEALINGS IN THE SOFTWARE.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "sunxi-h3-h5.dtsi"
 | 
					#include <arm/sunxi-h3-h5.dtsi>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/ {
 | 
					/ {
 | 
				
			||||||
	cpus {
 | 
						cpus {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1 +0,0 @@
 | 
				
			||||||
../../../../arm/boot/dts/sunxi-h3-h5.dtsi
 | 
					 | 
				
			||||||
| 
						 | 
					@ -286,6 +286,10 @@
 | 
				
			||||||
#define SCTLR_ELx_A	(1 << 1)
 | 
					#define SCTLR_ELx_A	(1 << 1)
 | 
				
			||||||
#define SCTLR_ELx_M	1
 | 
					#define SCTLR_ELx_M	1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define SCTLR_EL2_RES1	((1 << 4)  | (1 << 5)  | (1 << 11) | (1 << 16) | \
 | 
				
			||||||
 | 
								 (1 << 16) | (1 << 18) | (1 << 22) | (1 << 23) | \
 | 
				
			||||||
 | 
								 (1 << 28) | (1 << 29))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define SCTLR_ELx_FLAGS	(SCTLR_ELx_M | SCTLR_ELx_A | SCTLR_ELx_C | \
 | 
					#define SCTLR_ELx_FLAGS	(SCTLR_ELx_M | SCTLR_ELx_A | SCTLR_ELx_C | \
 | 
				
			||||||
			 SCTLR_ELx_SA | SCTLR_ELx_I)
 | 
								 SCTLR_ELx_SA | SCTLR_ELx_I)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -106,10 +106,13 @@ __do_hyp_init:
 | 
				
			||||||
	tlbi	alle2
 | 
						tlbi	alle2
 | 
				
			||||||
	dsb	sy
 | 
						dsb	sy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mrs	x4, sctlr_el2
 | 
						/*
 | 
				
			||||||
	and	x4, x4, #SCTLR_ELx_EE	// preserve endianness of EL2
 | 
						 * Preserve all the RES1 bits while setting the default flags,
 | 
				
			||||||
	ldr	x5, =SCTLR_ELx_FLAGS
 | 
						 * as well as the EE bit on BE. Drop the A flag since the compiler
 | 
				
			||||||
	orr	x4, x4, x5
 | 
						 * is allowed to generate unaligned accesses.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						ldr	x4, =(SCTLR_EL2_RES1 | (SCTLR_ELx_FLAGS & ~SCTLR_ELx_A))
 | 
				
			||||||
 | 
					CPU_BE(	orr	x4, x4, #SCTLR_ELx_EE)
 | 
				
			||||||
	msr	sctlr_el2, x4
 | 
						msr	sctlr_el2, x4
 | 
				
			||||||
	isb
 | 
						isb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -65,8 +65,8 @@ static bool access_gic_ctlr(struct kvm_vcpu *vcpu, struct sys_reg_params *p,
 | 
				
			||||||
		 * Here set VMCR.CTLR in ICC_CTLR_EL1 layout.
 | 
							 * Here set VMCR.CTLR in ICC_CTLR_EL1 layout.
 | 
				
			||||||
		 * The vgic_set_vmcr() will convert to ICH_VMCR layout.
 | 
							 * The vgic_set_vmcr() will convert to ICH_VMCR layout.
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
		vmcr.ctlr = val & ICC_CTLR_EL1_CBPR_MASK;
 | 
							vmcr.cbpr = (val & ICC_CTLR_EL1_CBPR_MASK) >> ICC_CTLR_EL1_CBPR_SHIFT;
 | 
				
			||||||
		vmcr.ctlr |= val & ICC_CTLR_EL1_EOImode_MASK;
 | 
							vmcr.eoim = (val & ICC_CTLR_EL1_EOImode_MASK) >> ICC_CTLR_EL1_EOImode_SHIFT;
 | 
				
			||||||
		vgic_set_vmcr(vcpu, &vmcr);
 | 
							vgic_set_vmcr(vcpu, &vmcr);
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		val = 0;
 | 
							val = 0;
 | 
				
			||||||
| 
						 | 
					@ -83,8 +83,8 @@ static bool access_gic_ctlr(struct kvm_vcpu *vcpu, struct sys_reg_params *p,
 | 
				
			||||||
		 * The VMCR.CTLR value is in ICC_CTLR_EL1 layout.
 | 
							 * The VMCR.CTLR value is in ICC_CTLR_EL1 layout.
 | 
				
			||||||
		 * Extract it directly using ICC_CTLR_EL1 reg definitions.
 | 
							 * Extract it directly using ICC_CTLR_EL1 reg definitions.
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
		val |= vmcr.ctlr & ICC_CTLR_EL1_CBPR_MASK;
 | 
							val |= (vmcr.cbpr << ICC_CTLR_EL1_CBPR_SHIFT) & ICC_CTLR_EL1_CBPR_MASK;
 | 
				
			||||||
		val |= vmcr.ctlr & ICC_CTLR_EL1_EOImode_MASK;
 | 
							val |= (vmcr.eoim << ICC_CTLR_EL1_EOImode_SHIFT) & ICC_CTLR_EL1_EOImode_MASK;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		p->regval = val;
 | 
							p->regval = val;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -135,7 +135,7 @@ static bool access_gic_bpr1(struct kvm_vcpu *vcpu, struct sys_reg_params *p,
 | 
				
			||||||
		p->regval = 0;
 | 
							p->regval = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	vgic_get_vmcr(vcpu, &vmcr);
 | 
						vgic_get_vmcr(vcpu, &vmcr);
 | 
				
			||||||
	if (!((vmcr.ctlr & ICH_VMCR_CBPR_MASK) >> ICH_VMCR_CBPR_SHIFT)) {
 | 
						if (!vmcr.cbpr) {
 | 
				
			||||||
		if (p->is_write) {
 | 
							if (p->is_write) {
 | 
				
			||||||
			vmcr.abpr = (p->regval & ICC_BPR1_EL1_MASK) >>
 | 
								vmcr.abpr = (p->regval & ICC_BPR1_EL1_MASK) >>
 | 
				
			||||||
				     ICC_BPR1_EL1_SHIFT;
 | 
									     ICC_BPR1_EL1_SHIFT;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -36,6 +36,7 @@ int bpf_jit_enable __read_mostly;
 | 
				
			||||||
#define TMP_REG_1 (MAX_BPF_JIT_REG + 0)
 | 
					#define TMP_REG_1 (MAX_BPF_JIT_REG + 0)
 | 
				
			||||||
#define TMP_REG_2 (MAX_BPF_JIT_REG + 1)
 | 
					#define TMP_REG_2 (MAX_BPF_JIT_REG + 1)
 | 
				
			||||||
#define TCALL_CNT (MAX_BPF_JIT_REG + 2)
 | 
					#define TCALL_CNT (MAX_BPF_JIT_REG + 2)
 | 
				
			||||||
 | 
					#define TMP_REG_3 (MAX_BPF_JIT_REG + 3)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Map BPF registers to A64 registers */
 | 
					/* Map BPF registers to A64 registers */
 | 
				
			||||||
static const int bpf2a64[] = {
 | 
					static const int bpf2a64[] = {
 | 
				
			||||||
| 
						 | 
					@ -57,6 +58,7 @@ static const int bpf2a64[] = {
 | 
				
			||||||
	/* temporary registers for internal BPF JIT */
 | 
						/* temporary registers for internal BPF JIT */
 | 
				
			||||||
	[TMP_REG_1] = A64_R(10),
 | 
						[TMP_REG_1] = A64_R(10),
 | 
				
			||||||
	[TMP_REG_2] = A64_R(11),
 | 
						[TMP_REG_2] = A64_R(11),
 | 
				
			||||||
 | 
						[TMP_REG_3] = A64_R(12),
 | 
				
			||||||
	/* tail_call_cnt */
 | 
						/* tail_call_cnt */
 | 
				
			||||||
	[TCALL_CNT] = A64_R(26),
 | 
						[TCALL_CNT] = A64_R(26),
 | 
				
			||||||
	/* temporary register for blinding constants */
 | 
						/* temporary register for blinding constants */
 | 
				
			||||||
| 
						 | 
					@ -319,6 +321,7 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx)
 | 
				
			||||||
	const u8 src = bpf2a64[insn->src_reg];
 | 
						const u8 src = bpf2a64[insn->src_reg];
 | 
				
			||||||
	const u8 tmp = bpf2a64[TMP_REG_1];
 | 
						const u8 tmp = bpf2a64[TMP_REG_1];
 | 
				
			||||||
	const u8 tmp2 = bpf2a64[TMP_REG_2];
 | 
						const u8 tmp2 = bpf2a64[TMP_REG_2];
 | 
				
			||||||
 | 
						const u8 tmp3 = bpf2a64[TMP_REG_3];
 | 
				
			||||||
	const s16 off = insn->off;
 | 
						const s16 off = insn->off;
 | 
				
			||||||
	const s32 imm = insn->imm;
 | 
						const s32 imm = insn->imm;
 | 
				
			||||||
	const int i = insn - ctx->prog->insnsi;
 | 
						const int i = insn - ctx->prog->insnsi;
 | 
				
			||||||
| 
						 | 
					@ -689,10 +692,10 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx)
 | 
				
			||||||
		emit(A64_PRFM(tmp, PST, L1, STRM), ctx);
 | 
							emit(A64_PRFM(tmp, PST, L1, STRM), ctx);
 | 
				
			||||||
		emit(A64_LDXR(isdw, tmp2, tmp), ctx);
 | 
							emit(A64_LDXR(isdw, tmp2, tmp), ctx);
 | 
				
			||||||
		emit(A64_ADD(isdw, tmp2, tmp2, src), ctx);
 | 
							emit(A64_ADD(isdw, tmp2, tmp2, src), ctx);
 | 
				
			||||||
		emit(A64_STXR(isdw, tmp2, tmp, tmp2), ctx);
 | 
							emit(A64_STXR(isdw, tmp2, tmp, tmp3), ctx);
 | 
				
			||||||
		jmp_offset = -3;
 | 
							jmp_offset = -3;
 | 
				
			||||||
		check_imm19(jmp_offset);
 | 
							check_imm19(jmp_offset);
 | 
				
			||||||
		emit(A64_CBNZ(0, tmp2, jmp_offset), ctx);
 | 
							emit(A64_CBNZ(0, tmp3, jmp_offset), ctx);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* R0 = ntohx(*(size *)(((struct sk_buff *)R6)->data + imm)) */
 | 
						/* R0 = ntohx(*(size *)(((struct sk_buff *)R6)->data + imm)) */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -75,7 +75,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsi
 | 
				
			||||||
		addr = PAGE_ALIGN(addr);
 | 
							addr = PAGE_ALIGN(addr);
 | 
				
			||||||
		vma = find_vma(current->mm, addr);
 | 
							vma = find_vma(current->mm, addr);
 | 
				
			||||||
		if (TASK_SIZE - len >= addr &&
 | 
							if (TASK_SIZE - len >= addr &&
 | 
				
			||||||
		    (!vma || addr + len <= vma->vm_start))
 | 
							    (!vma || addr + len <= vm_start_gap(vma)))
 | 
				
			||||||
			goto success;
 | 
								goto success;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -37,15 +37,14 @@ __kernel_size_t __clear_user_hexagon(void __user *dest, unsigned long count)
 | 
				
			||||||
	long uncleared;
 | 
						long uncleared;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	while (count > PAGE_SIZE) {
 | 
						while (count > PAGE_SIZE) {
 | 
				
			||||||
		uncleared = __copy_to_user_hexagon(dest, &empty_zero_page,
 | 
							uncleared = raw_copy_to_user(dest, &empty_zero_page, PAGE_SIZE);
 | 
				
			||||||
						PAGE_SIZE);
 | 
					 | 
				
			||||||
		if (uncleared)
 | 
							if (uncleared)
 | 
				
			||||||
			return count - (PAGE_SIZE - uncleared);
 | 
								return count - (PAGE_SIZE - uncleared);
 | 
				
			||||||
		count -= PAGE_SIZE;
 | 
							count -= PAGE_SIZE;
 | 
				
			||||||
		dest += PAGE_SIZE;
 | 
							dest += PAGE_SIZE;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (count)
 | 
						if (count)
 | 
				
			||||||
		count = __copy_to_user_hexagon(dest, &empty_zero_page, count);
 | 
							count = raw_copy_to_user(dest, &empty_zero_page, count);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return count;
 | 
						return count;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -128,19 +128,19 @@ quiet_cmd_cpp_its_S = ITS     $@
 | 
				
			||||||
			-DADDR_BITS=$(ADDR_BITS) \
 | 
								-DADDR_BITS=$(ADDR_BITS) \
 | 
				
			||||||
			-DADDR_CELLS=$(itb_addr_cells)
 | 
								-DADDR_CELLS=$(itb_addr_cells)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(obj)/vmlinux.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S FORCE
 | 
					$(obj)/vmlinux.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S $(VMLINUX) FORCE
 | 
				
			||||||
	$(call if_changed_dep,cpp_its_S,none,vmlinux.bin)
 | 
						$(call if_changed_dep,cpp_its_S,none,vmlinux.bin)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(obj)/vmlinux.gz.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S FORCE
 | 
					$(obj)/vmlinux.gz.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S $(VMLINUX) FORCE
 | 
				
			||||||
	$(call if_changed_dep,cpp_its_S,gzip,vmlinux.bin.gz)
 | 
						$(call if_changed_dep,cpp_its_S,gzip,vmlinux.bin.gz)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(obj)/vmlinux.bz2.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S FORCE
 | 
					$(obj)/vmlinux.bz2.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S $(VMLINUX)  FORCE
 | 
				
			||||||
	$(call if_changed_dep,cpp_its_S,bzip2,vmlinux.bin.bz2)
 | 
						$(call if_changed_dep,cpp_its_S,bzip2,vmlinux.bin.bz2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(obj)/vmlinux.lzma.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S FORCE
 | 
					$(obj)/vmlinux.lzma.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S $(VMLINUX) FORCE
 | 
				
			||||||
	$(call if_changed_dep,cpp_its_S,lzma,vmlinux.bin.lzma)
 | 
						$(call if_changed_dep,cpp_its_S,lzma,vmlinux.bin.lzma)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(obj)/vmlinux.lzo.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S FORCE
 | 
					$(obj)/vmlinux.lzo.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S $(VMLINUX) FORCE
 | 
				
			||||||
	$(call if_changed_dep,cpp_its_S,lzo,vmlinux.bin.lzo)
 | 
						$(call if_changed_dep,cpp_its_S,lzo,vmlinux.bin.lzo)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
quiet_cmd_itb-image = ITB     $@
 | 
					quiet_cmd_itb-image = ITB     $@
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -35,7 +35,12 @@ extern pte_t *pkmap_page_table;
 | 
				
			||||||
 * easily, subsequent pte tables have to be allocated in one physical
 | 
					 * easily, subsequent pte tables have to be allocated in one physical
 | 
				
			||||||
 * chunk of RAM.
 | 
					 * chunk of RAM.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					#ifdef CONFIG_PHYS_ADDR_T_64BIT
 | 
				
			||||||
 | 
					#define LAST_PKMAP 512
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
#define LAST_PKMAP 1024
 | 
					#define LAST_PKMAP 1024
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define LAST_PKMAP_MASK (LAST_PKMAP-1)
 | 
					#define LAST_PKMAP_MASK (LAST_PKMAP-1)
 | 
				
			||||||
#define PKMAP_NR(virt)	((virt-PKMAP_BASE) >> PAGE_SHIFT)
 | 
					#define PKMAP_NR(virt)	((virt-PKMAP_BASE) >> PAGE_SHIFT)
 | 
				
			||||||
#define PKMAP_ADDR(nr)	(PKMAP_BASE + ((nr) << PAGE_SHIFT))
 | 
					#define PKMAP_ADDR(nr)	(PKMAP_BASE + ((nr) << PAGE_SHIFT))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -43,6 +43,7 @@ typedef union mips_instruction kprobe_opcode_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define flush_insn_slot(p)						\
 | 
					#define flush_insn_slot(p)						\
 | 
				
			||||||
do {									\
 | 
					do {									\
 | 
				
			||||||
 | 
						if (p->addr)							\
 | 
				
			||||||
		flush_icache_range((unsigned long)p->addr,		\
 | 
							flush_icache_range((unsigned long)p->addr,		\
 | 
				
			||||||
			   (unsigned long)p->addr +			\
 | 
								   (unsigned long)p->addr +			\
 | 
				
			||||||
			   (MAX_INSN_SIZE * sizeof(kprobe_opcode_t)));	\
 | 
								   (MAX_INSN_SIZE * sizeof(kprobe_opcode_t)));	\
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,10 @@
 | 
				
			||||||
#define __ARCH_USE_5LEVEL_HACK
 | 
					#define __ARCH_USE_5LEVEL_HACK
 | 
				
			||||||
#include <asm-generic/pgtable-nopmd.h>
 | 
					#include <asm-generic/pgtable-nopmd.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef CONFIG_HIGHMEM
 | 
				
			||||||
 | 
					#include <asm/highmem.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern int temp_tlb_entry;
 | 
					extern int temp_tlb_entry;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					@ -62,7 +66,8 @@ extern int add_temporary_entry(unsigned long entrylo0, unsigned long entrylo1,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define VMALLOC_START	  MAP_BASE
 | 
					#define VMALLOC_START	  MAP_BASE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define PKMAP_BASE		(0xfe000000UL)
 | 
					#define PKMAP_END	((FIXADDR_START) & ~((LAST_PKMAP << PAGE_SHIFT)-1))
 | 
				
			||||||
 | 
					#define PKMAP_BASE	(PKMAP_END - PAGE_SIZE * LAST_PKMAP)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_HIGHMEM
 | 
					#ifdef CONFIG_HIGHMEM
 | 
				
			||||||
# define VMALLOC_END	(PKMAP_BASE-2*PAGE_SIZE)
 | 
					# define VMALLOC_END	(PKMAP_BASE-2*PAGE_SIZE)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -804,8 +804,10 @@ int __compute_return_epc_for_insn(struct pt_regs *regs,
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		/* Compact branch: BNEZC || JIALC */
 | 
							/* Compact branch: BNEZC || JIALC */
 | 
				
			||||||
		if (insn.i_format.rs)
 | 
							if (!insn.i_format.rs) {
 | 
				
			||||||
 | 
								/* JIALC: set $31/ra */
 | 
				
			||||||
			regs->regs[31] = epc + 4;
 | 
								regs->regs[31] = epc + 4;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		regs->cp0_epc += 8;
 | 
							regs->cp0_epc += 8;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,20 +38,6 @@ void arch_ftrace_update_code(int command)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Check if the address is in kernel space
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Clone core_kernel_text() from kernel/extable.c, but doesn't call
 | 
					 | 
				
			||||||
 * init_kernel_text() for Ftrace doesn't trace functions in init sections.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
static inline int in_kernel_space(unsigned long ip)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (ip >= (unsigned long)_stext &&
 | 
					 | 
				
			||||||
	    ip <= (unsigned long)_etext)
 | 
					 | 
				
			||||||
		return 1;
 | 
					 | 
				
			||||||
	return 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef CONFIG_DYNAMIC_FTRACE
 | 
					#ifdef CONFIG_DYNAMIC_FTRACE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define JAL 0x0c000000		/* jump & link: ip --> ra, jump to target */
 | 
					#define JAL 0x0c000000		/* jump & link: ip --> ra, jump to target */
 | 
				
			||||||
| 
						 | 
					@ -198,7 +184,7 @@ int ftrace_make_nop(struct module *mod,
 | 
				
			||||||
	 * If ip is in kernel space, no long call, otherwise, long call is
 | 
						 * If ip is in kernel space, no long call, otherwise, long call is
 | 
				
			||||||
	 * needed.
 | 
						 * needed.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	new = in_kernel_space(ip) ? INSN_NOP : INSN_B_1F;
 | 
						new = core_kernel_text(ip) ? INSN_NOP : INSN_B_1F;
 | 
				
			||||||
#ifdef CONFIG_64BIT
 | 
					#ifdef CONFIG_64BIT
 | 
				
			||||||
	return ftrace_modify_code(ip, new);
 | 
						return ftrace_modify_code(ip, new);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
| 
						 | 
					@ -218,12 +204,12 @@ int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr)
 | 
				
			||||||
	unsigned int new;
 | 
						unsigned int new;
 | 
				
			||||||
	unsigned long ip = rec->ip;
 | 
						unsigned long ip = rec->ip;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	new = in_kernel_space(ip) ? insn_jal_ftrace_caller : insn_la_mcount[0];
 | 
						new = core_kernel_text(ip) ? insn_jal_ftrace_caller : insn_la_mcount[0];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_64BIT
 | 
					#ifdef CONFIG_64BIT
 | 
				
			||||||
	return ftrace_modify_code(ip, new);
 | 
						return ftrace_modify_code(ip, new);
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
	return ftrace_modify_code_2r(ip, new, in_kernel_space(ip) ?
 | 
						return ftrace_modify_code_2r(ip, new, core_kernel_text(ip) ?
 | 
				
			||||||
						INSN_NOP : insn_la_mcount[1]);
 | 
											INSN_NOP : insn_la_mcount[1]);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -289,7 +275,7 @@ unsigned long ftrace_get_parent_ra_addr(unsigned long self_ra, unsigned long
 | 
				
			||||||
	 * instruction "lui v1, hi_16bit_of_mcount"(offset is 24), but for
 | 
						 * instruction "lui v1, hi_16bit_of_mcount"(offset is 24), but for
 | 
				
			||||||
	 * kernel, move after the instruction "move ra, at"(offset is 16)
 | 
						 * kernel, move after the instruction "move ra, at"(offset is 16)
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	ip = self_ra - (in_kernel_space(self_ra) ? 16 : 24);
 | 
						ip = self_ra - (core_kernel_text(self_ra) ? 16 : 24);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * search the text until finding the non-store instruction or "s{d,w}
 | 
						 * search the text until finding the non-store instruction or "s{d,w}
 | 
				
			||||||
| 
						 | 
					@ -394,7 +380,7 @@ void prepare_ftrace_return(unsigned long *parent_ra_addr, unsigned long self_ra,
 | 
				
			||||||
	 * entries configured through the tracing/set_graph_function interface.
 | 
						 * entries configured through the tracing/set_graph_function interface.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	insns = in_kernel_space(self_ra) ? 2 : MCOUNT_OFFSET_INSNS + 1;
 | 
						insns = core_kernel_text(self_ra) ? 2 : MCOUNT_OFFSET_INSNS + 1;
 | 
				
			||||||
	trace.func = self_ra - (MCOUNT_INSN_SIZE * insns);
 | 
						trace.func = self_ra - (MCOUNT_INSN_SIZE * insns);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Only trace if the calling function expects to */
 | 
						/* Only trace if the calling function expects to */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1597,7 +1597,6 @@ static const struct mips_perf_event *mipsxx_pmu_map_raw_event(u64 config)
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case CPU_P5600:
 | 
						case CPU_P5600:
 | 
				
			||||||
	case CPU_P6600:
 | 
						case CPU_P6600:
 | 
				
			||||||
	case CPU_I6400:
 | 
					 | 
				
			||||||
		/* 8-bit event numbers */
 | 
							/* 8-bit event numbers */
 | 
				
			||||||
		raw_id = config & 0x1ff;
 | 
							raw_id = config & 0x1ff;
 | 
				
			||||||
		base_id = raw_id & 0xff;
 | 
							base_id = raw_id & 0xff;
 | 
				
			||||||
| 
						 | 
					@ -1610,6 +1609,11 @@ static const struct mips_perf_event *mipsxx_pmu_map_raw_event(u64 config)
 | 
				
			||||||
		raw_event.range = P;
 | 
							raw_event.range = P;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
 | 
						case CPU_I6400:
 | 
				
			||||||
 | 
							/* 8-bit event numbers */
 | 
				
			||||||
 | 
							base_id = config & 0xff;
 | 
				
			||||||
 | 
							raw_event.cntr_mask = CNTR_EVEN | CNTR_ODD;
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
	case CPU_1004K:
 | 
						case CPU_1004K:
 | 
				
			||||||
		if (IS_BOTH_COUNTERS_1004K_EVENT(base_id))
 | 
							if (IS_BOTH_COUNTERS_1004K_EVENT(base_id))
 | 
				
			||||||
			raw_event.cntr_mask = CNTR_EVEN | CNTR_ODD;
 | 
								raw_event.cntr_mask = CNTR_EVEN | CNTR_ODD;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -93,7 +93,7 @@ static unsigned long arch_get_unmapped_area_common(struct file *filp,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		vma = find_vma(mm, addr);
 | 
							vma = find_vma(mm, addr);
 | 
				
			||||||
		if (TASK_SIZE - len >= addr &&
 | 
							if (TASK_SIZE - len >= addr &&
 | 
				
			||||||
		    (!vma || addr + len <= vma->vm_start))
 | 
							    (!vma || addr + len <= vm_start_gap(vma)))
 | 
				
			||||||
			return addr;
 | 
								return addr;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,15 +51,15 @@ void __init pagetable_init(void)
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * Fixed mappings:
 | 
						 * Fixed mappings:
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	vaddr = __fix_to_virt(__end_of_fixed_addresses - 1) & PMD_MASK;
 | 
						vaddr = __fix_to_virt(__end_of_fixed_addresses - 1);
 | 
				
			||||||
	fixrange_init(vaddr, vaddr + FIXADDR_SIZE, pgd_base);
 | 
						fixrange_init(vaddr & PMD_MASK, vaddr + FIXADDR_SIZE, pgd_base);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_HIGHMEM
 | 
					#ifdef CONFIG_HIGHMEM
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * Permanent kmaps:
 | 
						 * Permanent kmaps:
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	vaddr = PKMAP_BASE;
 | 
						vaddr = PKMAP_BASE;
 | 
				
			||||||
	fixrange_init(vaddr, vaddr + PAGE_SIZE*LAST_PKMAP, pgd_base);
 | 
						fixrange_init(vaddr & PMD_MASK, vaddr + PAGE_SIZE*LAST_PKMAP, pgd_base);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pgd = swapper_pg_dir + __pgd_offset(vaddr);
 | 
						pgd = swapper_pg_dir + __pgd_offset(vaddr);
 | 
				
			||||||
	pud = pud_offset(pgd, vaddr);
 | 
						pud = pud_offset(pgd, vaddr);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -90,7 +90,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
 | 
				
			||||||
		unsigned long len, unsigned long pgoff, unsigned long flags)
 | 
							unsigned long len, unsigned long pgoff, unsigned long flags)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct mm_struct *mm = current->mm;
 | 
						struct mm_struct *mm = current->mm;
 | 
				
			||||||
	struct vm_area_struct *vma;
 | 
						struct vm_area_struct *vma, *prev;
 | 
				
			||||||
	unsigned long task_size = TASK_SIZE;
 | 
						unsigned long task_size = TASK_SIZE;
 | 
				
			||||||
	int do_color_align, last_mmap;
 | 
						int do_color_align, last_mmap;
 | 
				
			||||||
	struct vm_unmapped_area_info info;
 | 
						struct vm_unmapped_area_info info;
 | 
				
			||||||
| 
						 | 
					@ -117,9 +117,10 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			addr = PAGE_ALIGN(addr);
 | 
								addr = PAGE_ALIGN(addr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		vma = find_vma(mm, addr);
 | 
							vma = find_vma_prev(mm, addr, &prev);
 | 
				
			||||||
		if (task_size - len >= addr &&
 | 
							if (task_size - len >= addr &&
 | 
				
			||||||
		    (!vma || addr + len <= vma->vm_start))
 | 
							    (!vma || addr + len <= vm_start_gap(vma)) &&
 | 
				
			||||||
 | 
							    (!prev || addr >= vm_end_gap(prev)))
 | 
				
			||||||
			goto found_addr;
 | 
								goto found_addr;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -143,7 +144,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
 | 
				
			||||||
			  const unsigned long len, const unsigned long pgoff,
 | 
								  const unsigned long len, const unsigned long pgoff,
 | 
				
			||||||
			  const unsigned long flags)
 | 
								  const unsigned long flags)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct vm_area_struct *vma;
 | 
						struct vm_area_struct *vma, *prev;
 | 
				
			||||||
	struct mm_struct *mm = current->mm;
 | 
						struct mm_struct *mm = current->mm;
 | 
				
			||||||
	unsigned long addr = addr0;
 | 
						unsigned long addr = addr0;
 | 
				
			||||||
	int do_color_align, last_mmap;
 | 
						int do_color_align, last_mmap;
 | 
				
			||||||
| 
						 | 
					@ -177,9 +178,11 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
 | 
				
			||||||
			addr = COLOR_ALIGN(addr, last_mmap, pgoff);
 | 
								addr = COLOR_ALIGN(addr, last_mmap, pgoff);
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			addr = PAGE_ALIGN(addr);
 | 
								addr = PAGE_ALIGN(addr);
 | 
				
			||||||
		vma = find_vma(mm, addr);
 | 
					
 | 
				
			||||||
 | 
							vma = find_vma_prev(mm, addr, &prev);
 | 
				
			||||||
		if (TASK_SIZE - len >= addr &&
 | 
							if (TASK_SIZE - len >= addr &&
 | 
				
			||||||
		    (!vma || addr + len <= vma->vm_start))
 | 
							    (!vma || addr + len <= vm_start_gap(vma)) &&
 | 
				
			||||||
 | 
							    (!prev || addr >= vm_end_gap(prev)))
 | 
				
			||||||
			goto found_addr;
 | 
								goto found_addr;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1199,11 +1199,6 @@ source "arch/powerpc/Kconfig.debug"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
source "security/Kconfig"
 | 
					source "security/Kconfig"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config KEYS_COMPAT
 | 
					 | 
				
			||||||
	bool
 | 
					 | 
				
			||||||
	depends on COMPAT && KEYS
 | 
					 | 
				
			||||||
	default y
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
source "crypto/Kconfig"
 | 
					source "crypto/Kconfig"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config PPC_LIB_RHEAP
 | 
					config PPC_LIB_RHEAP
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -104,7 +104,7 @@
 | 
				
			||||||
		"1:	"PPC_TLNEI"	%4,0\n"			\
 | 
							"1:	"PPC_TLNEI"	%4,0\n"			\
 | 
				
			||||||
		_EMIT_BUG_ENTRY					\
 | 
							_EMIT_BUG_ENTRY					\
 | 
				
			||||||
		: : "i" (__FILE__), "i" (__LINE__),		\
 | 
							: : "i" (__FILE__), "i" (__LINE__),		\
 | 
				
			||||||
		  "i" (BUGFLAG_TAINT(TAINT_WARN)),		\
 | 
							  "i" (BUGFLAG_WARNING|BUGFLAG_TAINT(TAINT_WARN)),\
 | 
				
			||||||
		  "i" (sizeof(struct bug_entry)),		\
 | 
							  "i" (sizeof(struct bug_entry)),		\
 | 
				
			||||||
		  "r" (__ret_warn_on));				\
 | 
							  "r" (__ret_warn_on));				\
 | 
				
			||||||
	}							\
 | 
						}							\
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -94,11 +94,13 @@ struct xive_q {
 | 
				
			||||||
 * store at 0 and some ESBs support doing a trigger via a
 | 
					 * store at 0 and some ESBs support doing a trigger via a
 | 
				
			||||||
 * separate trigger page.
 | 
					 * separate trigger page.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define XIVE_ESB_GET		0x800
 | 
					#define XIVE_ESB_STORE_EOI	0x400 /* Store */
 | 
				
			||||||
#define XIVE_ESB_SET_PQ_00	0xc00
 | 
					#define XIVE_ESB_LOAD_EOI	0x000 /* Load */
 | 
				
			||||||
#define XIVE_ESB_SET_PQ_01	0xd00
 | 
					#define XIVE_ESB_GET		0x800 /* Load */
 | 
				
			||||||
#define XIVE_ESB_SET_PQ_10	0xe00
 | 
					#define XIVE_ESB_SET_PQ_00	0xc00 /* Load */
 | 
				
			||||||
#define XIVE_ESB_SET_PQ_11	0xf00
 | 
					#define XIVE_ESB_SET_PQ_01	0xd00 /* Load */
 | 
				
			||||||
 | 
					#define XIVE_ESB_SET_PQ_10	0xe00 /* Load */
 | 
				
			||||||
 | 
					#define XIVE_ESB_SET_PQ_11	0xf00 /* Load */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define XIVE_ESB_VAL_P		0x2
 | 
					#define XIVE_ESB_VAL_P		0x2
 | 
				
			||||||
#define XIVE_ESB_VAL_Q		0x1
 | 
					#define XIVE_ESB_VAL_Q		0x1
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -69,7 +69,7 @@ static void GLUE(X_PFX,source_eoi)(u32 hw_irq, struct xive_irq_data *xd)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* If the XIVE supports the new "store EOI facility, use it */
 | 
						/* If the XIVE supports the new "store EOI facility, use it */
 | 
				
			||||||
	if (xd->flags & XIVE_IRQ_FLAG_STORE_EOI)
 | 
						if (xd->flags & XIVE_IRQ_FLAG_STORE_EOI)
 | 
				
			||||||
		__x_writeq(0, __x_eoi_page(xd));
 | 
							__x_writeq(0, __x_eoi_page(xd) + XIVE_ESB_STORE_EOI);
 | 
				
			||||||
	else if (hw_irq && xd->flags & XIVE_IRQ_FLAG_EOI_FW) {
 | 
						else if (hw_irq && xd->flags & XIVE_IRQ_FLAG_EOI_FW) {
 | 
				
			||||||
		opal_int_eoi(hw_irq);
 | 
							opal_int_eoi(hw_irq);
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
| 
						 | 
					@ -89,7 +89,7 @@ static void GLUE(X_PFX,source_eoi)(u32 hw_irq, struct xive_irq_data *xd)
 | 
				
			||||||
		 * properly.
 | 
							 * properly.
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
		if (xd->flags & XIVE_IRQ_FLAG_LSI)
 | 
							if (xd->flags & XIVE_IRQ_FLAG_LSI)
 | 
				
			||||||
			__x_readq(__x_eoi_page(xd));
 | 
								__x_readq(__x_eoi_page(xd) + XIVE_ESB_LOAD_EOI);
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
			eoi_val = GLUE(X_PFX,esb_load)(xd, XIVE_ESB_SET_PQ_00);
 | 
								eoi_val = GLUE(X_PFX,esb_load)(xd, XIVE_ESB_SET_PQ_00);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -68,7 +68,7 @@ radix__hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
 | 
				
			||||||
		addr = ALIGN(addr, huge_page_size(h));
 | 
							addr = ALIGN(addr, huge_page_size(h));
 | 
				
			||||||
		vma = find_vma(mm, addr);
 | 
							vma = find_vma(mm, addr);
 | 
				
			||||||
		if (mm->task_size - len >= addr &&
 | 
							if (mm->task_size - len >= addr &&
 | 
				
			||||||
		    (!vma || addr + len <= vma->vm_start))
 | 
							    (!vma || addr + len <= vm_start_gap(vma)))
 | 
				
			||||||
			return addr;
 | 
								return addr;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -112,7 +112,7 @@ radix__arch_get_unmapped_area(struct file *filp, unsigned long addr,
 | 
				
			||||||
		addr = PAGE_ALIGN(addr);
 | 
							addr = PAGE_ALIGN(addr);
 | 
				
			||||||
		vma = find_vma(mm, addr);
 | 
							vma = find_vma(mm, addr);
 | 
				
			||||||
		if (mm->task_size - len >= addr && addr >= mmap_min_addr &&
 | 
							if (mm->task_size - len >= addr && addr >= mmap_min_addr &&
 | 
				
			||||||
		    (!vma || addr + len <= vma->vm_start))
 | 
							    (!vma || addr + len <= vm_start_gap(vma)))
 | 
				
			||||||
			return addr;
 | 
								return addr;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -157,7 +157,7 @@ radix__arch_get_unmapped_area_topdown(struct file *filp,
 | 
				
			||||||
		addr = PAGE_ALIGN(addr);
 | 
							addr = PAGE_ALIGN(addr);
 | 
				
			||||||
		vma = find_vma(mm, addr);
 | 
							vma = find_vma(mm, addr);
 | 
				
			||||||
		if (mm->task_size - len >= addr && addr >= mmap_min_addr &&
 | 
							if (mm->task_size - len >= addr && addr >= mmap_min_addr &&
 | 
				
			||||||
				(!vma || addr + len <= vma->vm_start))
 | 
									(!vma || addr + len <= vm_start_gap(vma)))
 | 
				
			||||||
			return addr;
 | 
								return addr;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -99,7 +99,7 @@ static int slice_area_is_free(struct mm_struct *mm, unsigned long addr,
 | 
				
			||||||
	if ((mm->task_size - len) < addr)
 | 
						if ((mm->task_size - len) < addr)
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
	vma = find_vma(mm, addr);
 | 
						vma = find_vma(mm, addr);
 | 
				
			||||||
	return (!vma || (addr + len) <= vma->vm_start);
 | 
						return (!vma || (addr + len) <= vm_start_gap(vma));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int slice_low_has_vma(struct mm_struct *mm, unsigned long slice)
 | 
					static int slice_low_has_vma(struct mm_struct *mm, unsigned long slice)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -75,7 +75,8 @@ struct pci_dev *pnv_pci_get_npu_dev(struct pci_dev *gpdev, int index)
 | 
				
			||||||
	if (WARN_ON(!gpdev))
 | 
						if (WARN_ON(!gpdev))
 | 
				
			||||||
		return NULL;
 | 
							return NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (WARN_ON(!gpdev->dev.of_node))
 | 
						/* Not all PCI devices have device-tree nodes */
 | 
				
			||||||
 | 
						if (!gpdev->dev.of_node)
 | 
				
			||||||
		return NULL;
 | 
							return NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Get assoicated PCI device */
 | 
						/* Get assoicated PCI device */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -297,7 +297,7 @@ void xive_do_source_eoi(u32 hw_irq, struct xive_irq_data *xd)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* If the XIVE supports the new "store EOI facility, use it */
 | 
						/* If the XIVE supports the new "store EOI facility, use it */
 | 
				
			||||||
	if (xd->flags & XIVE_IRQ_FLAG_STORE_EOI)
 | 
						if (xd->flags & XIVE_IRQ_FLAG_STORE_EOI)
 | 
				
			||||||
		out_be64(xd->eoi_mmio, 0);
 | 
							out_be64(xd->eoi_mmio + XIVE_ESB_STORE_EOI, 0);
 | 
				
			||||||
	else if (hw_irq && xd->flags & XIVE_IRQ_FLAG_EOI_FW) {
 | 
						else if (hw_irq && xd->flags & XIVE_IRQ_FLAG_EOI_FW) {
 | 
				
			||||||
		/*
 | 
							/*
 | 
				
			||||||
		 * The FW told us to call it. This happens for some
 | 
							 * The FW told us to call it. This happens for some
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -363,9 +363,6 @@ config COMPAT
 | 
				
			||||||
config SYSVIPC_COMPAT
 | 
					config SYSVIPC_COMPAT
 | 
				
			||||||
	def_bool y if COMPAT && SYSVIPC
 | 
						def_bool y if COMPAT && SYSVIPC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config KEYS_COMPAT
 | 
					 | 
				
			||||||
	def_bool y if COMPAT && KEYS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
config SMP
 | 
					config SMP
 | 
				
			||||||
	def_bool y
 | 
						def_bool y
 | 
				
			||||||
	prompt "Symmetric multi-processing support"
 | 
						prompt "Symmetric multi-processing support"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,6 +30,7 @@ CONFIG_USER_NS=y
 | 
				
			||||||
CONFIG_SCHED_AUTOGROUP=y
 | 
					CONFIG_SCHED_AUTOGROUP=y
 | 
				
			||||||
CONFIG_BLK_DEV_INITRD=y
 | 
					CONFIG_BLK_DEV_INITRD=y
 | 
				
			||||||
CONFIG_EXPERT=y
 | 
					CONFIG_EXPERT=y
 | 
				
			||||||
 | 
					# CONFIG_SYSFS_SYSCALL is not set
 | 
				
			||||||
CONFIG_BPF_SYSCALL=y
 | 
					CONFIG_BPF_SYSCALL=y
 | 
				
			||||||
CONFIG_USERFAULTFD=y
 | 
					CONFIG_USERFAULTFD=y
 | 
				
			||||||
# CONFIG_COMPAT_BRK is not set
 | 
					# CONFIG_COMPAT_BRK is not set
 | 
				
			||||||
| 
						 | 
					@ -44,7 +45,10 @@ CONFIG_MODULE_UNLOAD=y
 | 
				
			||||||
CONFIG_MODULE_FORCE_UNLOAD=y
 | 
					CONFIG_MODULE_FORCE_UNLOAD=y
 | 
				
			||||||
CONFIG_MODVERSIONS=y
 | 
					CONFIG_MODVERSIONS=y
 | 
				
			||||||
CONFIG_MODULE_SRCVERSION_ALL=y
 | 
					CONFIG_MODULE_SRCVERSION_ALL=y
 | 
				
			||||||
 | 
					CONFIG_BLK_DEV_INTEGRITY=y
 | 
				
			||||||
CONFIG_BLK_DEV_THROTTLING=y
 | 
					CONFIG_BLK_DEV_THROTTLING=y
 | 
				
			||||||
 | 
					CONFIG_BLK_WBT=y
 | 
				
			||||||
 | 
					CONFIG_BLK_WBT_SQ=y
 | 
				
			||||||
CONFIG_PARTITION_ADVANCED=y
 | 
					CONFIG_PARTITION_ADVANCED=y
 | 
				
			||||||
CONFIG_IBM_PARTITION=y
 | 
					CONFIG_IBM_PARTITION=y
 | 
				
			||||||
CONFIG_BSD_DISKLABEL=y
 | 
					CONFIG_BSD_DISKLABEL=y
 | 
				
			||||||
| 
						 | 
					@ -90,6 +94,8 @@ CONFIG_UNIX=y
 | 
				
			||||||
CONFIG_UNIX_DIAG=m
 | 
					CONFIG_UNIX_DIAG=m
 | 
				
			||||||
CONFIG_XFRM_USER=m
 | 
					CONFIG_XFRM_USER=m
 | 
				
			||||||
CONFIG_NET_KEY=m
 | 
					CONFIG_NET_KEY=m
 | 
				
			||||||
 | 
					CONFIG_SMC=m
 | 
				
			||||||
 | 
					CONFIG_SMC_DIAG=m
 | 
				
			||||||
CONFIG_INET=y
 | 
					CONFIG_INET=y
 | 
				
			||||||
CONFIG_IP_MULTICAST=y
 | 
					CONFIG_IP_MULTICAST=y
 | 
				
			||||||
CONFIG_IP_ADVANCED_ROUTER=y
 | 
					CONFIG_IP_ADVANCED_ROUTER=y
 | 
				
			||||||
| 
						 | 
					@ -359,6 +365,7 @@ CONFIG_NET_ACT_SIMP=m
 | 
				
			||||||
CONFIG_NET_ACT_SKBEDIT=m
 | 
					CONFIG_NET_ACT_SKBEDIT=m
 | 
				
			||||||
CONFIG_NET_ACT_CSUM=m
 | 
					CONFIG_NET_ACT_CSUM=m
 | 
				
			||||||
CONFIG_DNS_RESOLVER=y
 | 
					CONFIG_DNS_RESOLVER=y
 | 
				
			||||||
 | 
					CONFIG_NETLINK_DIAG=m
 | 
				
			||||||
CONFIG_CGROUP_NET_PRIO=y
 | 
					CONFIG_CGROUP_NET_PRIO=y
 | 
				
			||||||
CONFIG_BPF_JIT=y
 | 
					CONFIG_BPF_JIT=y
 | 
				
			||||||
CONFIG_NET_PKTGEN=m
 | 
					CONFIG_NET_PKTGEN=m
 | 
				
			||||||
| 
						 | 
					@ -367,16 +374,19 @@ CONFIG_DEVTMPFS=y
 | 
				
			||||||
CONFIG_DMA_CMA=y
 | 
					CONFIG_DMA_CMA=y
 | 
				
			||||||
CONFIG_CMA_SIZE_MBYTES=0
 | 
					CONFIG_CMA_SIZE_MBYTES=0
 | 
				
			||||||
CONFIG_CONNECTOR=y
 | 
					CONFIG_CONNECTOR=y
 | 
				
			||||||
 | 
					CONFIG_ZRAM=m
 | 
				
			||||||
CONFIG_BLK_DEV_LOOP=m
 | 
					CONFIG_BLK_DEV_LOOP=m
 | 
				
			||||||
CONFIG_BLK_DEV_CRYPTOLOOP=m
 | 
					CONFIG_BLK_DEV_CRYPTOLOOP=m
 | 
				
			||||||
 | 
					CONFIG_BLK_DEV_DRBD=m
 | 
				
			||||||
CONFIG_BLK_DEV_NBD=m
 | 
					CONFIG_BLK_DEV_NBD=m
 | 
				
			||||||
CONFIG_BLK_DEV_OSD=m
 | 
					CONFIG_BLK_DEV_OSD=m
 | 
				
			||||||
CONFIG_BLK_DEV_RAM=y
 | 
					CONFIG_BLK_DEV_RAM=y
 | 
				
			||||||
CONFIG_BLK_DEV_RAM_SIZE=32768
 | 
					CONFIG_BLK_DEV_RAM_SIZE=32768
 | 
				
			||||||
CONFIG_CDROM_PKTCDVD=m
 | 
					CONFIG_BLK_DEV_RAM_DAX=y
 | 
				
			||||||
CONFIG_ATA_OVER_ETH=m
 | 
					 | 
				
			||||||
CONFIG_VIRTIO_BLK=y
 | 
					CONFIG_VIRTIO_BLK=y
 | 
				
			||||||
 | 
					CONFIG_BLK_DEV_RBD=m
 | 
				
			||||||
CONFIG_ENCLOSURE_SERVICES=m
 | 
					CONFIG_ENCLOSURE_SERVICES=m
 | 
				
			||||||
 | 
					CONFIG_GENWQE=m
 | 
				
			||||||
CONFIG_RAID_ATTRS=m
 | 
					CONFIG_RAID_ATTRS=m
 | 
				
			||||||
CONFIG_SCSI=y
 | 
					CONFIG_SCSI=y
 | 
				
			||||||
CONFIG_BLK_DEV_SD=y
 | 
					CONFIG_BLK_DEV_SD=y
 | 
				
			||||||
| 
						 | 
					@ -442,6 +452,8 @@ CONFIG_NLMON=m
 | 
				
			||||||
# CONFIG_NET_VENDOR_INTEL is not set
 | 
					# CONFIG_NET_VENDOR_INTEL is not set
 | 
				
			||||||
# CONFIG_NET_VENDOR_MARVELL is not set
 | 
					# CONFIG_NET_VENDOR_MARVELL is not set
 | 
				
			||||||
CONFIG_MLX4_EN=m
 | 
					CONFIG_MLX4_EN=m
 | 
				
			||||||
 | 
					CONFIG_MLX5_CORE=m
 | 
				
			||||||
 | 
					CONFIG_MLX5_CORE_EN=y
 | 
				
			||||||
# CONFIG_NET_VENDOR_NATSEMI is not set
 | 
					# CONFIG_NET_VENDOR_NATSEMI is not set
 | 
				
			||||||
CONFIG_PPP=m
 | 
					CONFIG_PPP=m
 | 
				
			||||||
CONFIG_PPP_BSDCOMP=m
 | 
					CONFIG_PPP_BSDCOMP=m
 | 
				
			||||||
| 
						 | 
					@ -452,7 +464,6 @@ CONFIG_PPTP=m
 | 
				
			||||||
CONFIG_PPPOL2TP=m
 | 
					CONFIG_PPPOL2TP=m
 | 
				
			||||||
CONFIG_PPP_ASYNC=m
 | 
					CONFIG_PPP_ASYNC=m
 | 
				
			||||||
CONFIG_PPP_SYNC_TTY=m
 | 
					CONFIG_PPP_SYNC_TTY=m
 | 
				
			||||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
 | 
					 | 
				
			||||||
# CONFIG_INPUT_KEYBOARD is not set
 | 
					# CONFIG_INPUT_KEYBOARD is not set
 | 
				
			||||||
# CONFIG_INPUT_MOUSE is not set
 | 
					# CONFIG_INPUT_MOUSE is not set
 | 
				
			||||||
# CONFIG_SERIO is not set
 | 
					# CONFIG_SERIO is not set
 | 
				
			||||||
| 
						 | 
					@ -471,6 +482,7 @@ CONFIG_DIAG288_WATCHDOG=m
 | 
				
			||||||
CONFIG_INFINIBAND=m
 | 
					CONFIG_INFINIBAND=m
 | 
				
			||||||
CONFIG_INFINIBAND_USER_ACCESS=m
 | 
					CONFIG_INFINIBAND_USER_ACCESS=m
 | 
				
			||||||
CONFIG_MLX4_INFINIBAND=m
 | 
					CONFIG_MLX4_INFINIBAND=m
 | 
				
			||||||
 | 
					CONFIG_MLX5_INFINIBAND=m
 | 
				
			||||||
CONFIG_VIRTIO_BALLOON=m
 | 
					CONFIG_VIRTIO_BALLOON=m
 | 
				
			||||||
CONFIG_EXT4_FS=y
 | 
					CONFIG_EXT4_FS=y
 | 
				
			||||||
CONFIG_EXT4_FS_POSIX_ACL=y
 | 
					CONFIG_EXT4_FS_POSIX_ACL=y
 | 
				
			||||||
| 
						 | 
					@ -487,12 +499,18 @@ CONFIG_XFS_POSIX_ACL=y
 | 
				
			||||||
CONFIG_XFS_RT=y
 | 
					CONFIG_XFS_RT=y
 | 
				
			||||||
CONFIG_XFS_DEBUG=y
 | 
					CONFIG_XFS_DEBUG=y
 | 
				
			||||||
CONFIG_GFS2_FS=m
 | 
					CONFIG_GFS2_FS=m
 | 
				
			||||||
 | 
					CONFIG_GFS2_FS_LOCKING_DLM=y
 | 
				
			||||||
CONFIG_OCFS2_FS=m
 | 
					CONFIG_OCFS2_FS=m
 | 
				
			||||||
CONFIG_BTRFS_FS=y
 | 
					CONFIG_BTRFS_FS=y
 | 
				
			||||||
CONFIG_BTRFS_FS_POSIX_ACL=y
 | 
					CONFIG_BTRFS_FS_POSIX_ACL=y
 | 
				
			||||||
 | 
					CONFIG_BTRFS_DEBUG=y
 | 
				
			||||||
CONFIG_NILFS2_FS=m
 | 
					CONFIG_NILFS2_FS=m
 | 
				
			||||||
 | 
					CONFIG_FS_DAX=y
 | 
				
			||||||
 | 
					CONFIG_EXPORTFS_BLOCK_OPS=y
 | 
				
			||||||
CONFIG_FANOTIFY=y
 | 
					CONFIG_FANOTIFY=y
 | 
				
			||||||
 | 
					CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
 | 
				
			||||||
CONFIG_QUOTA_NETLINK_INTERFACE=y
 | 
					CONFIG_QUOTA_NETLINK_INTERFACE=y
 | 
				
			||||||
 | 
					CONFIG_QUOTA_DEBUG=y
 | 
				
			||||||
CONFIG_QFMT_V1=m
 | 
					CONFIG_QFMT_V1=m
 | 
				
			||||||
CONFIG_QFMT_V2=m
 | 
					CONFIG_QFMT_V2=m
 | 
				
			||||||
CONFIG_AUTOFS4_FS=m
 | 
					CONFIG_AUTOFS4_FS=m
 | 
				
			||||||
| 
						 | 
					@ -558,6 +576,7 @@ CONFIG_HEADERS_CHECK=y
 | 
				
			||||||
CONFIG_DEBUG_SECTION_MISMATCH=y
 | 
					CONFIG_DEBUG_SECTION_MISMATCH=y
 | 
				
			||||||
CONFIG_MAGIC_SYSRQ=y
 | 
					CONFIG_MAGIC_SYSRQ=y
 | 
				
			||||||
CONFIG_DEBUG_PAGEALLOC=y
 | 
					CONFIG_DEBUG_PAGEALLOC=y
 | 
				
			||||||
 | 
					CONFIG_DEBUG_RODATA_TEST=y
 | 
				
			||||||
CONFIG_DEBUG_OBJECTS=y
 | 
					CONFIG_DEBUG_OBJECTS=y
 | 
				
			||||||
CONFIG_DEBUG_OBJECTS_SELFTEST=y
 | 
					CONFIG_DEBUG_OBJECTS_SELFTEST=y
 | 
				
			||||||
CONFIG_DEBUG_OBJECTS_FREE=y
 | 
					CONFIG_DEBUG_OBJECTS_FREE=y
 | 
				
			||||||
| 
						 | 
					@ -580,7 +599,6 @@ CONFIG_DETECT_HUNG_TASK=y
 | 
				
			||||||
CONFIG_WQ_WATCHDOG=y
 | 
					CONFIG_WQ_WATCHDOG=y
 | 
				
			||||||
CONFIG_PANIC_ON_OOPS=y
 | 
					CONFIG_PANIC_ON_OOPS=y
 | 
				
			||||||
CONFIG_DEBUG_TIMEKEEPING=y
 | 
					CONFIG_DEBUG_TIMEKEEPING=y
 | 
				
			||||||
CONFIG_TIMER_STATS=y
 | 
					 | 
				
			||||||
CONFIG_DEBUG_RT_MUTEXES=y
 | 
					CONFIG_DEBUG_RT_MUTEXES=y
 | 
				
			||||||
CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y
 | 
					CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y
 | 
				
			||||||
CONFIG_PROVE_LOCKING=y
 | 
					CONFIG_PROVE_LOCKING=y
 | 
				
			||||||
| 
						 | 
					@ -595,6 +613,7 @@ CONFIG_RCU_TORTURE_TEST=m
 | 
				
			||||||
CONFIG_RCU_CPU_STALL_TIMEOUT=300
 | 
					CONFIG_RCU_CPU_STALL_TIMEOUT=300
 | 
				
			||||||
CONFIG_NOTIFIER_ERROR_INJECTION=m
 | 
					CONFIG_NOTIFIER_ERROR_INJECTION=m
 | 
				
			||||||
CONFIG_PM_NOTIFIER_ERROR_INJECT=m
 | 
					CONFIG_PM_NOTIFIER_ERROR_INJECT=m
 | 
				
			||||||
 | 
					CONFIG_NETDEV_NOTIFIER_ERROR_INJECT=m
 | 
				
			||||||
CONFIG_FAULT_INJECTION=y
 | 
					CONFIG_FAULT_INJECTION=y
 | 
				
			||||||
CONFIG_FAILSLAB=y
 | 
					CONFIG_FAILSLAB=y
 | 
				
			||||||
CONFIG_FAIL_PAGE_ALLOC=y
 | 
					CONFIG_FAIL_PAGE_ALLOC=y
 | 
				
			||||||
| 
						 | 
					@ -616,13 +635,12 @@ CONFIG_HIST_TRIGGERS=y
 | 
				
			||||||
CONFIG_TRACE_ENUM_MAP_FILE=y
 | 
					CONFIG_TRACE_ENUM_MAP_FILE=y
 | 
				
			||||||
CONFIG_LKDTM=m
 | 
					CONFIG_LKDTM=m
 | 
				
			||||||
CONFIG_TEST_LIST_SORT=y
 | 
					CONFIG_TEST_LIST_SORT=y
 | 
				
			||||||
 | 
					CONFIG_TEST_SORT=y
 | 
				
			||||||
CONFIG_KPROBES_SANITY_TEST=y
 | 
					CONFIG_KPROBES_SANITY_TEST=y
 | 
				
			||||||
CONFIG_RBTREE_TEST=y
 | 
					CONFIG_RBTREE_TEST=y
 | 
				
			||||||
CONFIG_INTERVAL_TREE_TEST=m
 | 
					CONFIG_INTERVAL_TREE_TEST=m
 | 
				
			||||||
CONFIG_PERCPU_TEST=m
 | 
					CONFIG_PERCPU_TEST=m
 | 
				
			||||||
CONFIG_ATOMIC64_SELFTEST=y
 | 
					CONFIG_ATOMIC64_SELFTEST=y
 | 
				
			||||||
CONFIG_TEST_STRING_HELPERS=y
 | 
					 | 
				
			||||||
CONFIG_TEST_KSTRTOX=y
 | 
					 | 
				
			||||||
CONFIG_DMA_API_DEBUG=y
 | 
					CONFIG_DMA_API_DEBUG=y
 | 
				
			||||||
CONFIG_TEST_BPF=m
 | 
					CONFIG_TEST_BPF=m
 | 
				
			||||||
CONFIG_BUG_ON_DATA_CORRUPTION=y
 | 
					CONFIG_BUG_ON_DATA_CORRUPTION=y
 | 
				
			||||||
| 
						 | 
					@ -630,6 +648,7 @@ CONFIG_S390_PTDUMP=y
 | 
				
			||||||
CONFIG_ENCRYPTED_KEYS=m
 | 
					CONFIG_ENCRYPTED_KEYS=m
 | 
				
			||||||
CONFIG_SECURITY=y
 | 
					CONFIG_SECURITY=y
 | 
				
			||||||
CONFIG_SECURITY_NETWORK=y
 | 
					CONFIG_SECURITY_NETWORK=y
 | 
				
			||||||
 | 
					CONFIG_HARDENED_USERCOPY=y
 | 
				
			||||||
CONFIG_SECURITY_SELINUX=y
 | 
					CONFIG_SECURITY_SELINUX=y
 | 
				
			||||||
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
 | 
					CONFIG_SECURITY_SELINUX_BOOTPARAM=y
 | 
				
			||||||
CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
 | 
					CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
 | 
				
			||||||
| 
						 | 
					@ -640,7 +659,9 @@ CONFIG_CRYPTO_RSA=m
 | 
				
			||||||
CONFIG_CRYPTO_DH=m
 | 
					CONFIG_CRYPTO_DH=m
 | 
				
			||||||
CONFIG_CRYPTO_ECDH=m
 | 
					CONFIG_CRYPTO_ECDH=m
 | 
				
			||||||
CONFIG_CRYPTO_USER=m
 | 
					CONFIG_CRYPTO_USER=m
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_PCRYPT=m
 | 
				
			||||||
CONFIG_CRYPTO_CRYPTD=m
 | 
					CONFIG_CRYPTO_CRYPTD=m
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_MCRYPTD=m
 | 
				
			||||||
CONFIG_CRYPTO_TEST=m
 | 
					CONFIG_CRYPTO_TEST=m
 | 
				
			||||||
CONFIG_CRYPTO_CCM=m
 | 
					CONFIG_CRYPTO_CCM=m
 | 
				
			||||||
CONFIG_CRYPTO_GCM=m
 | 
					CONFIG_CRYPTO_GCM=m
 | 
				
			||||||
| 
						 | 
					@ -648,6 +669,7 @@ CONFIG_CRYPTO_CHACHA20POLY1305=m
 | 
				
			||||||
CONFIG_CRYPTO_LRW=m
 | 
					CONFIG_CRYPTO_LRW=m
 | 
				
			||||||
CONFIG_CRYPTO_PCBC=m
 | 
					CONFIG_CRYPTO_PCBC=m
 | 
				
			||||||
CONFIG_CRYPTO_KEYWRAP=m
 | 
					CONFIG_CRYPTO_KEYWRAP=m
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_CMAC=m
 | 
				
			||||||
CONFIG_CRYPTO_XCBC=m
 | 
					CONFIG_CRYPTO_XCBC=m
 | 
				
			||||||
CONFIG_CRYPTO_VMAC=m
 | 
					CONFIG_CRYPTO_VMAC=m
 | 
				
			||||||
CONFIG_CRYPTO_CRC32=m
 | 
					CONFIG_CRYPTO_CRC32=m
 | 
				
			||||||
| 
						 | 
					@ -657,8 +679,10 @@ CONFIG_CRYPTO_RMD160=m
 | 
				
			||||||
CONFIG_CRYPTO_RMD256=m
 | 
					CONFIG_CRYPTO_RMD256=m
 | 
				
			||||||
CONFIG_CRYPTO_RMD320=m
 | 
					CONFIG_CRYPTO_RMD320=m
 | 
				
			||||||
CONFIG_CRYPTO_SHA512=m
 | 
					CONFIG_CRYPTO_SHA512=m
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_SHA3=m
 | 
				
			||||||
CONFIG_CRYPTO_TGR192=m
 | 
					CONFIG_CRYPTO_TGR192=m
 | 
				
			||||||
CONFIG_CRYPTO_WP512=m
 | 
					CONFIG_CRYPTO_WP512=m
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_AES_TI=m
 | 
				
			||||||
CONFIG_CRYPTO_ANUBIS=m
 | 
					CONFIG_CRYPTO_ANUBIS=m
 | 
				
			||||||
CONFIG_CRYPTO_BLOWFISH=m
 | 
					CONFIG_CRYPTO_BLOWFISH=m
 | 
				
			||||||
CONFIG_CRYPTO_CAMELLIA=m
 | 
					CONFIG_CRYPTO_CAMELLIA=m
 | 
				
			||||||
| 
						 | 
					@ -674,6 +698,7 @@ CONFIG_CRYPTO_TWOFISH=m
 | 
				
			||||||
CONFIG_CRYPTO_842=m
 | 
					CONFIG_CRYPTO_842=m
 | 
				
			||||||
CONFIG_CRYPTO_LZ4=m
 | 
					CONFIG_CRYPTO_LZ4=m
 | 
				
			||||||
CONFIG_CRYPTO_LZ4HC=m
 | 
					CONFIG_CRYPTO_LZ4HC=m
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_ANSI_CPRNG=m
 | 
				
			||||||
CONFIG_CRYPTO_USER_API_HASH=m
 | 
					CONFIG_CRYPTO_USER_API_HASH=m
 | 
				
			||||||
CONFIG_CRYPTO_USER_API_SKCIPHER=m
 | 
					CONFIG_CRYPTO_USER_API_SKCIPHER=m
 | 
				
			||||||
CONFIG_CRYPTO_USER_API_RNG=m
 | 
					CONFIG_CRYPTO_USER_API_RNG=m
 | 
				
			||||||
| 
						 | 
					@ -685,6 +710,7 @@ CONFIG_CRYPTO_SHA256_S390=m
 | 
				
			||||||
CONFIG_CRYPTO_SHA512_S390=m
 | 
					CONFIG_CRYPTO_SHA512_S390=m
 | 
				
			||||||
CONFIG_CRYPTO_DES_S390=m
 | 
					CONFIG_CRYPTO_DES_S390=m
 | 
				
			||||||
CONFIG_CRYPTO_AES_S390=m
 | 
					CONFIG_CRYPTO_AES_S390=m
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_PAES_S390=m
 | 
				
			||||||
CONFIG_CRYPTO_GHASH_S390=m
 | 
					CONFIG_CRYPTO_GHASH_S390=m
 | 
				
			||||||
CONFIG_CRYPTO_CRC32_S390=y
 | 
					CONFIG_CRYPTO_CRC32_S390=y
 | 
				
			||||||
CONFIG_ASYMMETRIC_KEY_TYPE=y
 | 
					CONFIG_ASYMMETRIC_KEY_TYPE=y
 | 
				
			||||||
| 
						 | 
					@ -692,6 +718,7 @@ CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m
 | 
				
			||||||
CONFIG_X509_CERTIFICATE_PARSER=m
 | 
					CONFIG_X509_CERTIFICATE_PARSER=m
 | 
				
			||||||
CONFIG_CRC7=m
 | 
					CONFIG_CRC7=m
 | 
				
			||||||
CONFIG_CRC8=m
 | 
					CONFIG_CRC8=m
 | 
				
			||||||
 | 
					CONFIG_RANDOM32_SELFTEST=y
 | 
				
			||||||
CONFIG_CORDIC=m
 | 
					CONFIG_CORDIC=m
 | 
				
			||||||
CONFIG_CMM=m
 | 
					CONFIG_CMM=m
 | 
				
			||||||
CONFIG_APPLDATA_BASE=y
 | 
					CONFIG_APPLDATA_BASE=y
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,6 +31,7 @@ CONFIG_USER_NS=y
 | 
				
			||||||
CONFIG_SCHED_AUTOGROUP=y
 | 
					CONFIG_SCHED_AUTOGROUP=y
 | 
				
			||||||
CONFIG_BLK_DEV_INITRD=y
 | 
					CONFIG_BLK_DEV_INITRD=y
 | 
				
			||||||
CONFIG_EXPERT=y
 | 
					CONFIG_EXPERT=y
 | 
				
			||||||
 | 
					# CONFIG_SYSFS_SYSCALL is not set
 | 
				
			||||||
CONFIG_BPF_SYSCALL=y
 | 
					CONFIG_BPF_SYSCALL=y
 | 
				
			||||||
CONFIG_USERFAULTFD=y
 | 
					CONFIG_USERFAULTFD=y
 | 
				
			||||||
# CONFIG_COMPAT_BRK is not set
 | 
					# CONFIG_COMPAT_BRK is not set
 | 
				
			||||||
| 
						 | 
					@ -46,7 +47,10 @@ CONFIG_MODULE_UNLOAD=y
 | 
				
			||||||
CONFIG_MODULE_FORCE_UNLOAD=y
 | 
					CONFIG_MODULE_FORCE_UNLOAD=y
 | 
				
			||||||
CONFIG_MODVERSIONS=y
 | 
					CONFIG_MODVERSIONS=y
 | 
				
			||||||
CONFIG_MODULE_SRCVERSION_ALL=y
 | 
					CONFIG_MODULE_SRCVERSION_ALL=y
 | 
				
			||||||
 | 
					CONFIG_BLK_DEV_INTEGRITY=y
 | 
				
			||||||
CONFIG_BLK_DEV_THROTTLING=y
 | 
					CONFIG_BLK_DEV_THROTTLING=y
 | 
				
			||||||
 | 
					CONFIG_BLK_WBT=y
 | 
				
			||||||
 | 
					CONFIG_BLK_WBT_SQ=y
 | 
				
			||||||
CONFIG_PARTITION_ADVANCED=y
 | 
					CONFIG_PARTITION_ADVANCED=y
 | 
				
			||||||
CONFIG_IBM_PARTITION=y
 | 
					CONFIG_IBM_PARTITION=y
 | 
				
			||||||
CONFIG_BSD_DISKLABEL=y
 | 
					CONFIG_BSD_DISKLABEL=y
 | 
				
			||||||
| 
						 | 
					@ -88,6 +92,8 @@ CONFIG_UNIX=y
 | 
				
			||||||
CONFIG_UNIX_DIAG=m
 | 
					CONFIG_UNIX_DIAG=m
 | 
				
			||||||
CONFIG_XFRM_USER=m
 | 
					CONFIG_XFRM_USER=m
 | 
				
			||||||
CONFIG_NET_KEY=m
 | 
					CONFIG_NET_KEY=m
 | 
				
			||||||
 | 
					CONFIG_SMC=m
 | 
				
			||||||
 | 
					CONFIG_SMC_DIAG=m
 | 
				
			||||||
CONFIG_INET=y
 | 
					CONFIG_INET=y
 | 
				
			||||||
CONFIG_IP_MULTICAST=y
 | 
					CONFIG_IP_MULTICAST=y
 | 
				
			||||||
CONFIG_IP_ADVANCED_ROUTER=y
 | 
					CONFIG_IP_ADVANCED_ROUTER=y
 | 
				
			||||||
| 
						 | 
					@ -356,6 +362,7 @@ CONFIG_NET_ACT_SIMP=m
 | 
				
			||||||
CONFIG_NET_ACT_SKBEDIT=m
 | 
					CONFIG_NET_ACT_SKBEDIT=m
 | 
				
			||||||
CONFIG_NET_ACT_CSUM=m
 | 
					CONFIG_NET_ACT_CSUM=m
 | 
				
			||||||
CONFIG_DNS_RESOLVER=y
 | 
					CONFIG_DNS_RESOLVER=y
 | 
				
			||||||
 | 
					CONFIG_NETLINK_DIAG=m
 | 
				
			||||||
CONFIG_CGROUP_NET_PRIO=y
 | 
					CONFIG_CGROUP_NET_PRIO=y
 | 
				
			||||||
CONFIG_BPF_JIT=y
 | 
					CONFIG_BPF_JIT=y
 | 
				
			||||||
CONFIG_NET_PKTGEN=m
 | 
					CONFIG_NET_PKTGEN=m
 | 
				
			||||||
| 
						 | 
					@ -364,16 +371,18 @@ CONFIG_DEVTMPFS=y
 | 
				
			||||||
CONFIG_DMA_CMA=y
 | 
					CONFIG_DMA_CMA=y
 | 
				
			||||||
CONFIG_CMA_SIZE_MBYTES=0
 | 
					CONFIG_CMA_SIZE_MBYTES=0
 | 
				
			||||||
CONFIG_CONNECTOR=y
 | 
					CONFIG_CONNECTOR=y
 | 
				
			||||||
 | 
					CONFIG_ZRAM=m
 | 
				
			||||||
CONFIG_BLK_DEV_LOOP=m
 | 
					CONFIG_BLK_DEV_LOOP=m
 | 
				
			||||||
CONFIG_BLK_DEV_CRYPTOLOOP=m
 | 
					CONFIG_BLK_DEV_CRYPTOLOOP=m
 | 
				
			||||||
 | 
					CONFIG_BLK_DEV_DRBD=m
 | 
				
			||||||
CONFIG_BLK_DEV_NBD=m
 | 
					CONFIG_BLK_DEV_NBD=m
 | 
				
			||||||
CONFIG_BLK_DEV_OSD=m
 | 
					CONFIG_BLK_DEV_OSD=m
 | 
				
			||||||
CONFIG_BLK_DEV_RAM=y
 | 
					CONFIG_BLK_DEV_RAM=y
 | 
				
			||||||
CONFIG_BLK_DEV_RAM_SIZE=32768
 | 
					CONFIG_BLK_DEV_RAM_SIZE=32768
 | 
				
			||||||
CONFIG_CDROM_PKTCDVD=m
 | 
					CONFIG_BLK_DEV_RAM_DAX=y
 | 
				
			||||||
CONFIG_ATA_OVER_ETH=m
 | 
					 | 
				
			||||||
CONFIG_VIRTIO_BLK=y
 | 
					CONFIG_VIRTIO_BLK=y
 | 
				
			||||||
CONFIG_ENCLOSURE_SERVICES=m
 | 
					CONFIG_ENCLOSURE_SERVICES=m
 | 
				
			||||||
 | 
					CONFIG_GENWQE=m
 | 
				
			||||||
CONFIG_RAID_ATTRS=m
 | 
					CONFIG_RAID_ATTRS=m
 | 
				
			||||||
CONFIG_SCSI=y
 | 
					CONFIG_SCSI=y
 | 
				
			||||||
CONFIG_BLK_DEV_SD=y
 | 
					CONFIG_BLK_DEV_SD=y
 | 
				
			||||||
| 
						 | 
					@ -439,6 +448,8 @@ CONFIG_NLMON=m
 | 
				
			||||||
# CONFIG_NET_VENDOR_INTEL is not set
 | 
					# CONFIG_NET_VENDOR_INTEL is not set
 | 
				
			||||||
# CONFIG_NET_VENDOR_MARVELL is not set
 | 
					# CONFIG_NET_VENDOR_MARVELL is not set
 | 
				
			||||||
CONFIG_MLX4_EN=m
 | 
					CONFIG_MLX4_EN=m
 | 
				
			||||||
 | 
					CONFIG_MLX5_CORE=m
 | 
				
			||||||
 | 
					CONFIG_MLX5_CORE_EN=y
 | 
				
			||||||
# CONFIG_NET_VENDOR_NATSEMI is not set
 | 
					# CONFIG_NET_VENDOR_NATSEMI is not set
 | 
				
			||||||
CONFIG_PPP=m
 | 
					CONFIG_PPP=m
 | 
				
			||||||
CONFIG_PPP_BSDCOMP=m
 | 
					CONFIG_PPP_BSDCOMP=m
 | 
				
			||||||
| 
						 | 
					@ -449,7 +460,6 @@ CONFIG_PPTP=m
 | 
				
			||||||
CONFIG_PPPOL2TP=m
 | 
					CONFIG_PPPOL2TP=m
 | 
				
			||||||
CONFIG_PPP_ASYNC=m
 | 
					CONFIG_PPP_ASYNC=m
 | 
				
			||||||
CONFIG_PPP_SYNC_TTY=m
 | 
					CONFIG_PPP_SYNC_TTY=m
 | 
				
			||||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
 | 
					 | 
				
			||||||
# CONFIG_INPUT_KEYBOARD is not set
 | 
					# CONFIG_INPUT_KEYBOARD is not set
 | 
				
			||||||
# CONFIG_INPUT_MOUSE is not set
 | 
					# CONFIG_INPUT_MOUSE is not set
 | 
				
			||||||
# CONFIG_SERIO is not set
 | 
					# CONFIG_SERIO is not set
 | 
				
			||||||
| 
						 | 
					@ -468,6 +478,7 @@ CONFIG_DIAG288_WATCHDOG=m
 | 
				
			||||||
CONFIG_INFINIBAND=m
 | 
					CONFIG_INFINIBAND=m
 | 
				
			||||||
CONFIG_INFINIBAND_USER_ACCESS=m
 | 
					CONFIG_INFINIBAND_USER_ACCESS=m
 | 
				
			||||||
CONFIG_MLX4_INFINIBAND=m
 | 
					CONFIG_MLX4_INFINIBAND=m
 | 
				
			||||||
 | 
					CONFIG_MLX5_INFINIBAND=m
 | 
				
			||||||
CONFIG_VIRTIO_BALLOON=m
 | 
					CONFIG_VIRTIO_BALLOON=m
 | 
				
			||||||
CONFIG_EXT4_FS=y
 | 
					CONFIG_EXT4_FS=y
 | 
				
			||||||
CONFIG_EXT4_FS_POSIX_ACL=y
 | 
					CONFIG_EXT4_FS_POSIX_ACL=y
 | 
				
			||||||
| 
						 | 
					@ -483,11 +494,15 @@ CONFIG_XFS_QUOTA=y
 | 
				
			||||||
CONFIG_XFS_POSIX_ACL=y
 | 
					CONFIG_XFS_POSIX_ACL=y
 | 
				
			||||||
CONFIG_XFS_RT=y
 | 
					CONFIG_XFS_RT=y
 | 
				
			||||||
CONFIG_GFS2_FS=m
 | 
					CONFIG_GFS2_FS=m
 | 
				
			||||||
 | 
					CONFIG_GFS2_FS_LOCKING_DLM=y
 | 
				
			||||||
CONFIG_OCFS2_FS=m
 | 
					CONFIG_OCFS2_FS=m
 | 
				
			||||||
CONFIG_BTRFS_FS=y
 | 
					CONFIG_BTRFS_FS=y
 | 
				
			||||||
CONFIG_BTRFS_FS_POSIX_ACL=y
 | 
					CONFIG_BTRFS_FS_POSIX_ACL=y
 | 
				
			||||||
CONFIG_NILFS2_FS=m
 | 
					CONFIG_NILFS2_FS=m
 | 
				
			||||||
 | 
					CONFIG_FS_DAX=y
 | 
				
			||||||
 | 
					CONFIG_EXPORTFS_BLOCK_OPS=y
 | 
				
			||||||
CONFIG_FANOTIFY=y
 | 
					CONFIG_FANOTIFY=y
 | 
				
			||||||
 | 
					CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
 | 
				
			||||||
CONFIG_QUOTA_NETLINK_INTERFACE=y
 | 
					CONFIG_QUOTA_NETLINK_INTERFACE=y
 | 
				
			||||||
CONFIG_QFMT_V1=m
 | 
					CONFIG_QFMT_V1=m
 | 
				
			||||||
CONFIG_QFMT_V2=m
 | 
					CONFIG_QFMT_V2=m
 | 
				
			||||||
| 
						 | 
					@ -553,7 +568,6 @@ CONFIG_UNUSED_SYMBOLS=y
 | 
				
			||||||
CONFIG_MAGIC_SYSRQ=y
 | 
					CONFIG_MAGIC_SYSRQ=y
 | 
				
			||||||
CONFIG_DEBUG_MEMORY_INIT=y
 | 
					CONFIG_DEBUG_MEMORY_INIT=y
 | 
				
			||||||
CONFIG_PANIC_ON_OOPS=y
 | 
					CONFIG_PANIC_ON_OOPS=y
 | 
				
			||||||
CONFIG_TIMER_STATS=y
 | 
					 | 
				
			||||||
CONFIG_RCU_TORTURE_TEST=m
 | 
					CONFIG_RCU_TORTURE_TEST=m
 | 
				
			||||||
CONFIG_RCU_CPU_STALL_TIMEOUT=60
 | 
					CONFIG_RCU_CPU_STALL_TIMEOUT=60
 | 
				
			||||||
CONFIG_LATENCYTOP=y
 | 
					CONFIG_LATENCYTOP=y
 | 
				
			||||||
| 
						 | 
					@ -576,6 +590,7 @@ CONFIG_BIG_KEYS=y
 | 
				
			||||||
CONFIG_ENCRYPTED_KEYS=m
 | 
					CONFIG_ENCRYPTED_KEYS=m
 | 
				
			||||||
CONFIG_SECURITY=y
 | 
					CONFIG_SECURITY=y
 | 
				
			||||||
CONFIG_SECURITY_NETWORK=y
 | 
					CONFIG_SECURITY_NETWORK=y
 | 
				
			||||||
 | 
					CONFIG_HARDENED_USERCOPY=y
 | 
				
			||||||
CONFIG_SECURITY_SELINUX=y
 | 
					CONFIG_SECURITY_SELINUX=y
 | 
				
			||||||
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
 | 
					CONFIG_SECURITY_SELINUX_BOOTPARAM=y
 | 
				
			||||||
CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
 | 
					CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
 | 
				
			||||||
| 
						 | 
					@ -599,6 +614,7 @@ CONFIG_CRYPTO_CHACHA20POLY1305=m
 | 
				
			||||||
CONFIG_CRYPTO_LRW=m
 | 
					CONFIG_CRYPTO_LRW=m
 | 
				
			||||||
CONFIG_CRYPTO_PCBC=m
 | 
					CONFIG_CRYPTO_PCBC=m
 | 
				
			||||||
CONFIG_CRYPTO_KEYWRAP=m
 | 
					CONFIG_CRYPTO_KEYWRAP=m
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_CMAC=m
 | 
				
			||||||
CONFIG_CRYPTO_XCBC=m
 | 
					CONFIG_CRYPTO_XCBC=m
 | 
				
			||||||
CONFIG_CRYPTO_VMAC=m
 | 
					CONFIG_CRYPTO_VMAC=m
 | 
				
			||||||
CONFIG_CRYPTO_CRC32=m
 | 
					CONFIG_CRYPTO_CRC32=m
 | 
				
			||||||
| 
						 | 
					@ -611,6 +627,7 @@ CONFIG_CRYPTO_SHA512=m
 | 
				
			||||||
CONFIG_CRYPTO_SHA3=m
 | 
					CONFIG_CRYPTO_SHA3=m
 | 
				
			||||||
CONFIG_CRYPTO_TGR192=m
 | 
					CONFIG_CRYPTO_TGR192=m
 | 
				
			||||||
CONFIG_CRYPTO_WP512=m
 | 
					CONFIG_CRYPTO_WP512=m
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_AES_TI=m
 | 
				
			||||||
CONFIG_CRYPTO_ANUBIS=m
 | 
					CONFIG_CRYPTO_ANUBIS=m
 | 
				
			||||||
CONFIG_CRYPTO_BLOWFISH=m
 | 
					CONFIG_CRYPTO_BLOWFISH=m
 | 
				
			||||||
CONFIG_CRYPTO_CAMELLIA=m
 | 
					CONFIG_CRYPTO_CAMELLIA=m
 | 
				
			||||||
| 
						 | 
					@ -626,16 +643,19 @@ CONFIG_CRYPTO_TWOFISH=m
 | 
				
			||||||
CONFIG_CRYPTO_842=m
 | 
					CONFIG_CRYPTO_842=m
 | 
				
			||||||
CONFIG_CRYPTO_LZ4=m
 | 
					CONFIG_CRYPTO_LZ4=m
 | 
				
			||||||
CONFIG_CRYPTO_LZ4HC=m
 | 
					CONFIG_CRYPTO_LZ4HC=m
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_ANSI_CPRNG=m
 | 
				
			||||||
CONFIG_CRYPTO_USER_API_HASH=m
 | 
					CONFIG_CRYPTO_USER_API_HASH=m
 | 
				
			||||||
CONFIG_CRYPTO_USER_API_SKCIPHER=m
 | 
					CONFIG_CRYPTO_USER_API_SKCIPHER=m
 | 
				
			||||||
CONFIG_CRYPTO_USER_API_RNG=m
 | 
					CONFIG_CRYPTO_USER_API_RNG=m
 | 
				
			||||||
CONFIG_CRYPTO_USER_API_AEAD=m
 | 
					CONFIG_CRYPTO_USER_API_AEAD=m
 | 
				
			||||||
CONFIG_ZCRYPT=m
 | 
					CONFIG_ZCRYPT=m
 | 
				
			||||||
 | 
					CONFIG_PKEY=m
 | 
				
			||||||
CONFIG_CRYPTO_SHA1_S390=m
 | 
					CONFIG_CRYPTO_SHA1_S390=m
 | 
				
			||||||
CONFIG_CRYPTO_SHA256_S390=m
 | 
					CONFIG_CRYPTO_SHA256_S390=m
 | 
				
			||||||
CONFIG_CRYPTO_SHA512_S390=m
 | 
					CONFIG_CRYPTO_SHA512_S390=m
 | 
				
			||||||
CONFIG_CRYPTO_DES_S390=m
 | 
					CONFIG_CRYPTO_DES_S390=m
 | 
				
			||||||
CONFIG_CRYPTO_AES_S390=m
 | 
					CONFIG_CRYPTO_AES_S390=m
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_PAES_S390=m
 | 
				
			||||||
CONFIG_CRYPTO_GHASH_S390=m
 | 
					CONFIG_CRYPTO_GHASH_S390=m
 | 
				
			||||||
CONFIG_CRYPTO_CRC32_S390=y
 | 
					CONFIG_CRYPTO_CRC32_S390=y
 | 
				
			||||||
CONFIG_CRC7=m
 | 
					CONFIG_CRC7=m
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,6 +31,7 @@ CONFIG_USER_NS=y
 | 
				
			||||||
CONFIG_SCHED_AUTOGROUP=y
 | 
					CONFIG_SCHED_AUTOGROUP=y
 | 
				
			||||||
CONFIG_BLK_DEV_INITRD=y
 | 
					CONFIG_BLK_DEV_INITRD=y
 | 
				
			||||||
CONFIG_EXPERT=y
 | 
					CONFIG_EXPERT=y
 | 
				
			||||||
 | 
					# CONFIG_SYSFS_SYSCALL is not set
 | 
				
			||||||
CONFIG_BPF_SYSCALL=y
 | 
					CONFIG_BPF_SYSCALL=y
 | 
				
			||||||
CONFIG_USERFAULTFD=y
 | 
					CONFIG_USERFAULTFD=y
 | 
				
			||||||
# CONFIG_COMPAT_BRK is not set
 | 
					# CONFIG_COMPAT_BRK is not set
 | 
				
			||||||
| 
						 | 
					@ -44,7 +45,10 @@ CONFIG_MODULE_UNLOAD=y
 | 
				
			||||||
CONFIG_MODULE_FORCE_UNLOAD=y
 | 
					CONFIG_MODULE_FORCE_UNLOAD=y
 | 
				
			||||||
CONFIG_MODVERSIONS=y
 | 
					CONFIG_MODVERSIONS=y
 | 
				
			||||||
CONFIG_MODULE_SRCVERSION_ALL=y
 | 
					CONFIG_MODULE_SRCVERSION_ALL=y
 | 
				
			||||||
 | 
					CONFIG_BLK_DEV_INTEGRITY=y
 | 
				
			||||||
CONFIG_BLK_DEV_THROTTLING=y
 | 
					CONFIG_BLK_DEV_THROTTLING=y
 | 
				
			||||||
 | 
					CONFIG_BLK_WBT=y
 | 
				
			||||||
 | 
					CONFIG_BLK_WBT_SQ=y
 | 
				
			||||||
CONFIG_PARTITION_ADVANCED=y
 | 
					CONFIG_PARTITION_ADVANCED=y
 | 
				
			||||||
CONFIG_IBM_PARTITION=y
 | 
					CONFIG_IBM_PARTITION=y
 | 
				
			||||||
CONFIG_BSD_DISKLABEL=y
 | 
					CONFIG_BSD_DISKLABEL=y
 | 
				
			||||||
| 
						 | 
					@ -86,6 +90,8 @@ CONFIG_UNIX=y
 | 
				
			||||||
CONFIG_UNIX_DIAG=m
 | 
					CONFIG_UNIX_DIAG=m
 | 
				
			||||||
CONFIG_XFRM_USER=m
 | 
					CONFIG_XFRM_USER=m
 | 
				
			||||||
CONFIG_NET_KEY=m
 | 
					CONFIG_NET_KEY=m
 | 
				
			||||||
 | 
					CONFIG_SMC=m
 | 
				
			||||||
 | 
					CONFIG_SMC_DIAG=m
 | 
				
			||||||
CONFIG_INET=y
 | 
					CONFIG_INET=y
 | 
				
			||||||
CONFIG_IP_MULTICAST=y
 | 
					CONFIG_IP_MULTICAST=y
 | 
				
			||||||
CONFIG_IP_ADVANCED_ROUTER=y
 | 
					CONFIG_IP_ADVANCED_ROUTER=y
 | 
				
			||||||
| 
						 | 
					@ -354,6 +360,7 @@ CONFIG_NET_ACT_SIMP=m
 | 
				
			||||||
CONFIG_NET_ACT_SKBEDIT=m
 | 
					CONFIG_NET_ACT_SKBEDIT=m
 | 
				
			||||||
CONFIG_NET_ACT_CSUM=m
 | 
					CONFIG_NET_ACT_CSUM=m
 | 
				
			||||||
CONFIG_DNS_RESOLVER=y
 | 
					CONFIG_DNS_RESOLVER=y
 | 
				
			||||||
 | 
					CONFIG_NETLINK_DIAG=m
 | 
				
			||||||
CONFIG_CGROUP_NET_PRIO=y
 | 
					CONFIG_CGROUP_NET_PRIO=y
 | 
				
			||||||
CONFIG_BPF_JIT=y
 | 
					CONFIG_BPF_JIT=y
 | 
				
			||||||
CONFIG_NET_PKTGEN=m
 | 
					CONFIG_NET_PKTGEN=m
 | 
				
			||||||
| 
						 | 
					@ -362,16 +369,18 @@ CONFIG_DEVTMPFS=y
 | 
				
			||||||
CONFIG_DMA_CMA=y
 | 
					CONFIG_DMA_CMA=y
 | 
				
			||||||
CONFIG_CMA_SIZE_MBYTES=0
 | 
					CONFIG_CMA_SIZE_MBYTES=0
 | 
				
			||||||
CONFIG_CONNECTOR=y
 | 
					CONFIG_CONNECTOR=y
 | 
				
			||||||
 | 
					CONFIG_ZRAM=m
 | 
				
			||||||
CONFIG_BLK_DEV_LOOP=m
 | 
					CONFIG_BLK_DEV_LOOP=m
 | 
				
			||||||
CONFIG_BLK_DEV_CRYPTOLOOP=m
 | 
					CONFIG_BLK_DEV_CRYPTOLOOP=m
 | 
				
			||||||
 | 
					CONFIG_BLK_DEV_DRBD=m
 | 
				
			||||||
CONFIG_BLK_DEV_NBD=m
 | 
					CONFIG_BLK_DEV_NBD=m
 | 
				
			||||||
CONFIG_BLK_DEV_OSD=m
 | 
					CONFIG_BLK_DEV_OSD=m
 | 
				
			||||||
CONFIG_BLK_DEV_RAM=y
 | 
					CONFIG_BLK_DEV_RAM=y
 | 
				
			||||||
CONFIG_BLK_DEV_RAM_SIZE=32768
 | 
					CONFIG_BLK_DEV_RAM_SIZE=32768
 | 
				
			||||||
CONFIG_CDROM_PKTCDVD=m
 | 
					CONFIG_BLK_DEV_RAM_DAX=y
 | 
				
			||||||
CONFIG_ATA_OVER_ETH=m
 | 
					 | 
				
			||||||
CONFIG_VIRTIO_BLK=y
 | 
					CONFIG_VIRTIO_BLK=y
 | 
				
			||||||
CONFIG_ENCLOSURE_SERVICES=m
 | 
					CONFIG_ENCLOSURE_SERVICES=m
 | 
				
			||||||
 | 
					CONFIG_GENWQE=m
 | 
				
			||||||
CONFIG_RAID_ATTRS=m
 | 
					CONFIG_RAID_ATTRS=m
 | 
				
			||||||
CONFIG_SCSI=y
 | 
					CONFIG_SCSI=y
 | 
				
			||||||
CONFIG_BLK_DEV_SD=y
 | 
					CONFIG_BLK_DEV_SD=y
 | 
				
			||||||
| 
						 | 
					@ -437,6 +446,8 @@ CONFIG_NLMON=m
 | 
				
			||||||
# CONFIG_NET_VENDOR_INTEL is not set
 | 
					# CONFIG_NET_VENDOR_INTEL is not set
 | 
				
			||||||
# CONFIG_NET_VENDOR_MARVELL is not set
 | 
					# CONFIG_NET_VENDOR_MARVELL is not set
 | 
				
			||||||
CONFIG_MLX4_EN=m
 | 
					CONFIG_MLX4_EN=m
 | 
				
			||||||
 | 
					CONFIG_MLX5_CORE=m
 | 
				
			||||||
 | 
					CONFIG_MLX5_CORE_EN=y
 | 
				
			||||||
# CONFIG_NET_VENDOR_NATSEMI is not set
 | 
					# CONFIG_NET_VENDOR_NATSEMI is not set
 | 
				
			||||||
CONFIG_PPP=m
 | 
					CONFIG_PPP=m
 | 
				
			||||||
CONFIG_PPP_BSDCOMP=m
 | 
					CONFIG_PPP_BSDCOMP=m
 | 
				
			||||||
| 
						 | 
					@ -447,7 +458,6 @@ CONFIG_PPTP=m
 | 
				
			||||||
CONFIG_PPPOL2TP=m
 | 
					CONFIG_PPPOL2TP=m
 | 
				
			||||||
CONFIG_PPP_ASYNC=m
 | 
					CONFIG_PPP_ASYNC=m
 | 
				
			||||||
CONFIG_PPP_SYNC_TTY=m
 | 
					CONFIG_PPP_SYNC_TTY=m
 | 
				
			||||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
 | 
					 | 
				
			||||||
# CONFIG_INPUT_KEYBOARD is not set
 | 
					# CONFIG_INPUT_KEYBOARD is not set
 | 
				
			||||||
# CONFIG_INPUT_MOUSE is not set
 | 
					# CONFIG_INPUT_MOUSE is not set
 | 
				
			||||||
# CONFIG_SERIO is not set
 | 
					# CONFIG_SERIO is not set
 | 
				
			||||||
| 
						 | 
					@ -466,6 +476,7 @@ CONFIG_DIAG288_WATCHDOG=m
 | 
				
			||||||
CONFIG_INFINIBAND=m
 | 
					CONFIG_INFINIBAND=m
 | 
				
			||||||
CONFIG_INFINIBAND_USER_ACCESS=m
 | 
					CONFIG_INFINIBAND_USER_ACCESS=m
 | 
				
			||||||
CONFIG_MLX4_INFINIBAND=m
 | 
					CONFIG_MLX4_INFINIBAND=m
 | 
				
			||||||
 | 
					CONFIG_MLX5_INFINIBAND=m
 | 
				
			||||||
CONFIG_VIRTIO_BALLOON=m
 | 
					CONFIG_VIRTIO_BALLOON=m
 | 
				
			||||||
CONFIG_EXT4_FS=y
 | 
					CONFIG_EXT4_FS=y
 | 
				
			||||||
CONFIG_EXT4_FS_POSIX_ACL=y
 | 
					CONFIG_EXT4_FS_POSIX_ACL=y
 | 
				
			||||||
| 
						 | 
					@ -481,11 +492,15 @@ CONFIG_XFS_QUOTA=y
 | 
				
			||||||
CONFIG_XFS_POSIX_ACL=y
 | 
					CONFIG_XFS_POSIX_ACL=y
 | 
				
			||||||
CONFIG_XFS_RT=y
 | 
					CONFIG_XFS_RT=y
 | 
				
			||||||
CONFIG_GFS2_FS=m
 | 
					CONFIG_GFS2_FS=m
 | 
				
			||||||
 | 
					CONFIG_GFS2_FS_LOCKING_DLM=y
 | 
				
			||||||
CONFIG_OCFS2_FS=m
 | 
					CONFIG_OCFS2_FS=m
 | 
				
			||||||
CONFIG_BTRFS_FS=y
 | 
					CONFIG_BTRFS_FS=y
 | 
				
			||||||
CONFIG_BTRFS_FS_POSIX_ACL=y
 | 
					CONFIG_BTRFS_FS_POSIX_ACL=y
 | 
				
			||||||
CONFIG_NILFS2_FS=m
 | 
					CONFIG_NILFS2_FS=m
 | 
				
			||||||
 | 
					CONFIG_FS_DAX=y
 | 
				
			||||||
 | 
					CONFIG_EXPORTFS_BLOCK_OPS=y
 | 
				
			||||||
CONFIG_FANOTIFY=y
 | 
					CONFIG_FANOTIFY=y
 | 
				
			||||||
 | 
					CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
 | 
				
			||||||
CONFIG_QUOTA_NETLINK_INTERFACE=y
 | 
					CONFIG_QUOTA_NETLINK_INTERFACE=y
 | 
				
			||||||
CONFIG_QFMT_V1=m
 | 
					CONFIG_QFMT_V1=m
 | 
				
			||||||
CONFIG_QFMT_V2=m
 | 
					CONFIG_QFMT_V2=m
 | 
				
			||||||
| 
						 | 
					@ -551,7 +566,6 @@ CONFIG_UNUSED_SYMBOLS=y
 | 
				
			||||||
CONFIG_MAGIC_SYSRQ=y
 | 
					CONFIG_MAGIC_SYSRQ=y
 | 
				
			||||||
CONFIG_DEBUG_MEMORY_INIT=y
 | 
					CONFIG_DEBUG_MEMORY_INIT=y
 | 
				
			||||||
CONFIG_PANIC_ON_OOPS=y
 | 
					CONFIG_PANIC_ON_OOPS=y
 | 
				
			||||||
CONFIG_TIMER_STATS=y
 | 
					 | 
				
			||||||
CONFIG_RCU_TORTURE_TEST=m
 | 
					CONFIG_RCU_TORTURE_TEST=m
 | 
				
			||||||
CONFIG_RCU_CPU_STALL_TIMEOUT=60
 | 
					CONFIG_RCU_CPU_STALL_TIMEOUT=60
 | 
				
			||||||
CONFIG_LATENCYTOP=y
 | 
					CONFIG_LATENCYTOP=y
 | 
				
			||||||
| 
						 | 
					@ -574,6 +588,7 @@ CONFIG_BIG_KEYS=y
 | 
				
			||||||
CONFIG_ENCRYPTED_KEYS=m
 | 
					CONFIG_ENCRYPTED_KEYS=m
 | 
				
			||||||
CONFIG_SECURITY=y
 | 
					CONFIG_SECURITY=y
 | 
				
			||||||
CONFIG_SECURITY_NETWORK=y
 | 
					CONFIG_SECURITY_NETWORK=y
 | 
				
			||||||
 | 
					CONFIG_HARDENED_USERCOPY=y
 | 
				
			||||||
CONFIG_SECURITY_SELINUX=y
 | 
					CONFIG_SECURITY_SELINUX=y
 | 
				
			||||||
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
 | 
					CONFIG_SECURITY_SELINUX_BOOTPARAM=y
 | 
				
			||||||
CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
 | 
					CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
 | 
				
			||||||
| 
						 | 
					@ -597,6 +612,7 @@ CONFIG_CRYPTO_CHACHA20POLY1305=m
 | 
				
			||||||
CONFIG_CRYPTO_LRW=m
 | 
					CONFIG_CRYPTO_LRW=m
 | 
				
			||||||
CONFIG_CRYPTO_PCBC=m
 | 
					CONFIG_CRYPTO_PCBC=m
 | 
				
			||||||
CONFIG_CRYPTO_KEYWRAP=m
 | 
					CONFIG_CRYPTO_KEYWRAP=m
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_CMAC=m
 | 
				
			||||||
CONFIG_CRYPTO_XCBC=m
 | 
					CONFIG_CRYPTO_XCBC=m
 | 
				
			||||||
CONFIG_CRYPTO_VMAC=m
 | 
					CONFIG_CRYPTO_VMAC=m
 | 
				
			||||||
CONFIG_CRYPTO_CRC32=m
 | 
					CONFIG_CRYPTO_CRC32=m
 | 
				
			||||||
| 
						 | 
					@ -609,6 +625,7 @@ CONFIG_CRYPTO_SHA512=m
 | 
				
			||||||
CONFIG_CRYPTO_SHA3=m
 | 
					CONFIG_CRYPTO_SHA3=m
 | 
				
			||||||
CONFIG_CRYPTO_TGR192=m
 | 
					CONFIG_CRYPTO_TGR192=m
 | 
				
			||||||
CONFIG_CRYPTO_WP512=m
 | 
					CONFIG_CRYPTO_WP512=m
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_AES_TI=m
 | 
				
			||||||
CONFIG_CRYPTO_ANUBIS=m
 | 
					CONFIG_CRYPTO_ANUBIS=m
 | 
				
			||||||
CONFIG_CRYPTO_BLOWFISH=m
 | 
					CONFIG_CRYPTO_BLOWFISH=m
 | 
				
			||||||
CONFIG_CRYPTO_CAMELLIA=m
 | 
					CONFIG_CRYPTO_CAMELLIA=m
 | 
				
			||||||
| 
						 | 
					@ -624,6 +641,7 @@ CONFIG_CRYPTO_TWOFISH=m
 | 
				
			||||||
CONFIG_CRYPTO_842=m
 | 
					CONFIG_CRYPTO_842=m
 | 
				
			||||||
CONFIG_CRYPTO_LZ4=m
 | 
					CONFIG_CRYPTO_LZ4=m
 | 
				
			||||||
CONFIG_CRYPTO_LZ4HC=m
 | 
					CONFIG_CRYPTO_LZ4HC=m
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_ANSI_CPRNG=m
 | 
				
			||||||
CONFIG_CRYPTO_USER_API_HASH=m
 | 
					CONFIG_CRYPTO_USER_API_HASH=m
 | 
				
			||||||
CONFIG_CRYPTO_USER_API_SKCIPHER=m
 | 
					CONFIG_CRYPTO_USER_API_SKCIPHER=m
 | 
				
			||||||
CONFIG_CRYPTO_USER_API_RNG=m
 | 
					CONFIG_CRYPTO_USER_API_RNG=m
 | 
				
			||||||
| 
						 | 
					@ -635,6 +653,7 @@ CONFIG_CRYPTO_SHA256_S390=m
 | 
				
			||||||
CONFIG_CRYPTO_SHA512_S390=m
 | 
					CONFIG_CRYPTO_SHA512_S390=m
 | 
				
			||||||
CONFIG_CRYPTO_DES_S390=m
 | 
					CONFIG_CRYPTO_DES_S390=m
 | 
				
			||||||
CONFIG_CRYPTO_AES_S390=m
 | 
					CONFIG_CRYPTO_AES_S390=m
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_PAES_S390=m
 | 
				
			||||||
CONFIG_CRYPTO_GHASH_S390=m
 | 
					CONFIG_CRYPTO_GHASH_S390=m
 | 
				
			||||||
CONFIG_CRYPTO_CRC32_S390=y
 | 
					CONFIG_CRYPTO_CRC32_S390=y
 | 
				
			||||||
CONFIG_CRC7=m
 | 
					CONFIG_CRC7=m
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,8 +12,10 @@ CONFIG_TUNE_ZEC12=y
 | 
				
			||||||
CONFIG_NR_CPUS=2
 | 
					CONFIG_NR_CPUS=2
 | 
				
			||||||
# CONFIG_HOTPLUG_CPU is not set
 | 
					# CONFIG_HOTPLUG_CPU is not set
 | 
				
			||||||
CONFIG_HZ_100=y
 | 
					CONFIG_HZ_100=y
 | 
				
			||||||
 | 
					# CONFIG_ARCH_RANDOM is not set
 | 
				
			||||||
# CONFIG_COMPACTION is not set
 | 
					# CONFIG_COMPACTION is not set
 | 
				
			||||||
# CONFIG_MIGRATION is not set
 | 
					# CONFIG_MIGRATION is not set
 | 
				
			||||||
 | 
					# CONFIG_BOUNCE is not set
 | 
				
			||||||
# CONFIG_CHECK_STACK is not set
 | 
					# CONFIG_CHECK_STACK is not set
 | 
				
			||||||
# CONFIG_CHSC_SCH is not set
 | 
					# CONFIG_CHSC_SCH is not set
 | 
				
			||||||
# CONFIG_SCM_BUS is not set
 | 
					# CONFIG_SCM_BUS is not set
 | 
				
			||||||
| 
						 | 
					@ -36,11 +38,11 @@ CONFIG_SCSI_CONSTANTS=y
 | 
				
			||||||
CONFIG_SCSI_LOGGING=y
 | 
					CONFIG_SCSI_LOGGING=y
 | 
				
			||||||
CONFIG_SCSI_FC_ATTRS=y
 | 
					CONFIG_SCSI_FC_ATTRS=y
 | 
				
			||||||
CONFIG_ZFCP=y
 | 
					CONFIG_ZFCP=y
 | 
				
			||||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
 | 
					 | 
				
			||||||
# CONFIG_INPUT_KEYBOARD is not set
 | 
					# CONFIG_INPUT_KEYBOARD is not set
 | 
				
			||||||
# CONFIG_INPUT_MOUSE is not set
 | 
					# CONFIG_INPUT_MOUSE is not set
 | 
				
			||||||
# CONFIG_SERIO is not set
 | 
					# CONFIG_SERIO is not set
 | 
				
			||||||
# CONFIG_HVC_IUCV is not set
 | 
					# CONFIG_HVC_IUCV is not set
 | 
				
			||||||
 | 
					# CONFIG_HW_RANDOM_S390 is not set
 | 
				
			||||||
CONFIG_RAW_DRIVER=y
 | 
					CONFIG_RAW_DRIVER=y
 | 
				
			||||||
# CONFIG_SCLP_ASYNC is not set
 | 
					# CONFIG_SCLP_ASYNC is not set
 | 
				
			||||||
# CONFIG_HMC_DRV is not set
 | 
					# CONFIG_HMC_DRV is not set
 | 
				
			||||||
| 
						 | 
					@ -54,9 +56,9 @@ CONFIG_RAW_DRIVER=y
 | 
				
			||||||
# CONFIG_INOTIFY_USER is not set
 | 
					# CONFIG_INOTIFY_USER is not set
 | 
				
			||||||
CONFIG_CONFIGFS_FS=y
 | 
					CONFIG_CONFIGFS_FS=y
 | 
				
			||||||
# CONFIG_MISC_FILESYSTEMS is not set
 | 
					# CONFIG_MISC_FILESYSTEMS is not set
 | 
				
			||||||
 | 
					# CONFIG_NETWORK_FILESYSTEMS is not set
 | 
				
			||||||
CONFIG_PRINTK_TIME=y
 | 
					CONFIG_PRINTK_TIME=y
 | 
				
			||||||
CONFIG_DEBUG_INFO=y
 | 
					CONFIG_DEBUG_INFO=y
 | 
				
			||||||
CONFIG_DEBUG_FS=y
 | 
					 | 
				
			||||||
CONFIG_DEBUG_KERNEL=y
 | 
					CONFIG_DEBUG_KERNEL=y
 | 
				
			||||||
CONFIG_PANIC_ON_OOPS=y
 | 
					CONFIG_PANIC_ON_OOPS=y
 | 
				
			||||||
# CONFIG_SCHED_DEBUG is not set
 | 
					# CONFIG_SCHED_DEBUG is not set
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,6 +28,7 @@ CONFIG_NAMESPACES=y
 | 
				
			||||||
CONFIG_USER_NS=y
 | 
					CONFIG_USER_NS=y
 | 
				
			||||||
CONFIG_BLK_DEV_INITRD=y
 | 
					CONFIG_BLK_DEV_INITRD=y
 | 
				
			||||||
CONFIG_EXPERT=y
 | 
					CONFIG_EXPERT=y
 | 
				
			||||||
 | 
					# CONFIG_SYSFS_SYSCALL is not set
 | 
				
			||||||
CONFIG_BPF_SYSCALL=y
 | 
					CONFIG_BPF_SYSCALL=y
 | 
				
			||||||
CONFIG_USERFAULTFD=y
 | 
					CONFIG_USERFAULTFD=y
 | 
				
			||||||
# CONFIG_COMPAT_BRK is not set
 | 
					# CONFIG_COMPAT_BRK is not set
 | 
				
			||||||
| 
						 | 
					@ -108,7 +109,6 @@ CONFIG_ZFCP=y
 | 
				
			||||||
CONFIG_SCSI_VIRTIO=y
 | 
					CONFIG_SCSI_VIRTIO=y
 | 
				
			||||||
CONFIG_MD=y
 | 
					CONFIG_MD=y
 | 
				
			||||||
CONFIG_MD_LINEAR=m
 | 
					CONFIG_MD_LINEAR=m
 | 
				
			||||||
CONFIG_MD_RAID0=m
 | 
					 | 
				
			||||||
CONFIG_MD_MULTIPATH=m
 | 
					CONFIG_MD_MULTIPATH=m
 | 
				
			||||||
CONFIG_BLK_DEV_DM=y
 | 
					CONFIG_BLK_DEV_DM=y
 | 
				
			||||||
CONFIG_DM_CRYPT=m
 | 
					CONFIG_DM_CRYPT=m
 | 
				
			||||||
| 
						 | 
					@ -131,6 +131,7 @@ CONFIG_TUN=m
 | 
				
			||||||
CONFIG_VIRTIO_NET=y
 | 
					CONFIG_VIRTIO_NET=y
 | 
				
			||||||
# CONFIG_NET_VENDOR_ALACRITECH is not set
 | 
					# CONFIG_NET_VENDOR_ALACRITECH is not set
 | 
				
			||||||
# CONFIG_NET_VENDOR_SOLARFLARE is not set
 | 
					# CONFIG_NET_VENDOR_SOLARFLARE is not set
 | 
				
			||||||
 | 
					# CONFIG_NET_VENDOR_SYNOPSYS is not set
 | 
				
			||||||
# CONFIG_INPUT is not set
 | 
					# CONFIG_INPUT is not set
 | 
				
			||||||
# CONFIG_SERIO is not set
 | 
					# CONFIG_SERIO is not set
 | 
				
			||||||
CONFIG_DEVKMEM=y
 | 
					CONFIG_DEVKMEM=y
 | 
				
			||||||
| 
						 | 
					@ -162,7 +163,6 @@ CONFIG_MAGIC_SYSRQ=y
 | 
				
			||||||
CONFIG_DEBUG_PAGEALLOC=y
 | 
					CONFIG_DEBUG_PAGEALLOC=y
 | 
				
			||||||
CONFIG_DETECT_HUNG_TASK=y
 | 
					CONFIG_DETECT_HUNG_TASK=y
 | 
				
			||||||
CONFIG_PANIC_ON_OOPS=y
 | 
					CONFIG_PANIC_ON_OOPS=y
 | 
				
			||||||
CONFIG_TIMER_STATS=y
 | 
					 | 
				
			||||||
CONFIG_DEBUG_RT_MUTEXES=y
 | 
					CONFIG_DEBUG_RT_MUTEXES=y
 | 
				
			||||||
CONFIG_PROVE_LOCKING=y
 | 
					CONFIG_PROVE_LOCKING=y
 | 
				
			||||||
CONFIG_LOCK_STAT=y
 | 
					CONFIG_LOCK_STAT=y
 | 
				
			||||||
| 
						 | 
					@ -172,14 +172,12 @@ CONFIG_DEBUG_LIST=y
 | 
				
			||||||
CONFIG_DEBUG_SG=y
 | 
					CONFIG_DEBUG_SG=y
 | 
				
			||||||
CONFIG_DEBUG_NOTIFIERS=y
 | 
					CONFIG_DEBUG_NOTIFIERS=y
 | 
				
			||||||
CONFIG_RCU_CPU_STALL_TIMEOUT=60
 | 
					CONFIG_RCU_CPU_STALL_TIMEOUT=60
 | 
				
			||||||
CONFIG_RCU_TRACE=y
 | 
					 | 
				
			||||||
CONFIG_LATENCYTOP=y
 | 
					CONFIG_LATENCYTOP=y
 | 
				
			||||||
CONFIG_SCHED_TRACER=y
 | 
					CONFIG_SCHED_TRACER=y
 | 
				
			||||||
CONFIG_FTRACE_SYSCALLS=y
 | 
					CONFIG_FTRACE_SYSCALLS=y
 | 
				
			||||||
CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP=y
 | 
					CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP=y
 | 
				
			||||||
CONFIG_STACK_TRACER=y
 | 
					CONFIG_STACK_TRACER=y
 | 
				
			||||||
CONFIG_BLK_DEV_IO_TRACE=y
 | 
					CONFIG_BLK_DEV_IO_TRACE=y
 | 
				
			||||||
CONFIG_UPROBE_EVENTS=y
 | 
					 | 
				
			||||||
CONFIG_FUNCTION_PROFILER=y
 | 
					CONFIG_FUNCTION_PROFILER=y
 | 
				
			||||||
CONFIG_TRACE_ENUM_MAP_FILE=y
 | 
					CONFIG_TRACE_ENUM_MAP_FILE=y
 | 
				
			||||||
CONFIG_KPROBES_SANITY_TEST=y
 | 
					CONFIG_KPROBES_SANITY_TEST=y
 | 
				
			||||||
| 
						 | 
					@ -190,7 +188,6 @@ CONFIG_CRYPTO_CCM=m
 | 
				
			||||||
CONFIG_CRYPTO_GCM=m
 | 
					CONFIG_CRYPTO_GCM=m
 | 
				
			||||||
CONFIG_CRYPTO_CBC=y
 | 
					CONFIG_CRYPTO_CBC=y
 | 
				
			||||||
CONFIG_CRYPTO_CTS=m
 | 
					CONFIG_CRYPTO_CTS=m
 | 
				
			||||||
CONFIG_CRYPTO_ECB=m
 | 
					 | 
				
			||||||
CONFIG_CRYPTO_LRW=m
 | 
					CONFIG_CRYPTO_LRW=m
 | 
				
			||||||
CONFIG_CRYPTO_PCBC=m
 | 
					CONFIG_CRYPTO_PCBC=m
 | 
				
			||||||
CONFIG_CRYPTO_XTS=m
 | 
					CONFIG_CRYPTO_XTS=m
 | 
				
			||||||
| 
						 | 
					@ -230,6 +227,7 @@ CONFIG_CRYPTO_USER_API_SKCIPHER=m
 | 
				
			||||||
CONFIG_CRYPTO_USER_API_RNG=m
 | 
					CONFIG_CRYPTO_USER_API_RNG=m
 | 
				
			||||||
CONFIG_ZCRYPT=m
 | 
					CONFIG_ZCRYPT=m
 | 
				
			||||||
CONFIG_PKEY=m
 | 
					CONFIG_PKEY=m
 | 
				
			||||||
 | 
					CONFIG_CRYPTO_PAES_S390=m
 | 
				
			||||||
CONFIG_CRYPTO_SHA1_S390=m
 | 
					CONFIG_CRYPTO_SHA1_S390=m
 | 
				
			||||||
CONFIG_CRYPTO_SHA256_S390=m
 | 
					CONFIG_CRYPTO_SHA256_S390=m
 | 
				
			||||||
CONFIG_CRYPTO_SHA512_S390=m
 | 
					CONFIG_CRYPTO_SHA512_S390=m
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -541,7 +541,6 @@ struct kvm_s390_float_interrupt {
 | 
				
			||||||
	struct mutex ais_lock;
 | 
						struct mutex ais_lock;
 | 
				
			||||||
	u8 simm;
 | 
						u8 simm;
 | 
				
			||||||
	u8 nimm;
 | 
						u8 nimm;
 | 
				
			||||||
	int ais_enabled;
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct kvm_hw_wp_info_arch {
 | 
					struct kvm_hw_wp_info_arch {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -231,12 +231,17 @@ ENTRY(sie64a)
 | 
				
			||||||
	lctlg	%c1,%c1,__LC_USER_ASCE		# load primary asce
 | 
						lctlg	%c1,%c1,__LC_USER_ASCE		# load primary asce
 | 
				
			||||||
.Lsie_done:
 | 
					.Lsie_done:
 | 
				
			||||||
# some program checks are suppressing. C code (e.g. do_protection_exception)
 | 
					# some program checks are suppressing. C code (e.g. do_protection_exception)
 | 
				
			||||||
# will rewind the PSW by the ILC, which is 4 bytes in case of SIE. Other
 | 
					# will rewind the PSW by the ILC, which is often 4 bytes in case of SIE. There
 | 
				
			||||||
# instructions between sie64a and .Lsie_done should not cause program
 | 
					# are some corner cases (e.g. runtime instrumentation) where ILC is unpredictable.
 | 
				
			||||||
# interrupts. So lets use a nop (47 00 00 00) as a landing pad.
 | 
					# Other instructions between sie64a and .Lsie_done should not cause program
 | 
				
			||||||
 | 
					# interrupts. So lets use 3 nops as a landing pad for all possible rewinds.
 | 
				
			||||||
# See also .Lcleanup_sie
 | 
					# See also .Lcleanup_sie
 | 
				
			||||||
.Lrewind_pad:
 | 
					.Lrewind_pad6:
 | 
				
			||||||
	nop	0
 | 
						nopr	7
 | 
				
			||||||
 | 
					.Lrewind_pad4:
 | 
				
			||||||
 | 
						nopr	7
 | 
				
			||||||
 | 
					.Lrewind_pad2:
 | 
				
			||||||
 | 
						nopr	7
 | 
				
			||||||
	.globl sie_exit
 | 
						.globl sie_exit
 | 
				
			||||||
sie_exit:
 | 
					sie_exit:
 | 
				
			||||||
	lg	%r14,__SF_EMPTY+8(%r15)		# load guest register save area
 | 
						lg	%r14,__SF_EMPTY+8(%r15)		# load guest register save area
 | 
				
			||||||
| 
						 | 
					@ -249,7 +254,9 @@ sie_exit:
 | 
				
			||||||
	stg	%r14,__SF_EMPTY+16(%r15)	# set exit reason code
 | 
						stg	%r14,__SF_EMPTY+16(%r15)	# set exit reason code
 | 
				
			||||||
	j	sie_exit
 | 
						j	sie_exit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	EX_TABLE(.Lrewind_pad,.Lsie_fault)
 | 
						EX_TABLE(.Lrewind_pad6,.Lsie_fault)
 | 
				
			||||||
 | 
						EX_TABLE(.Lrewind_pad4,.Lsie_fault)
 | 
				
			||||||
 | 
						EX_TABLE(.Lrewind_pad2,.Lsie_fault)
 | 
				
			||||||
	EX_TABLE(sie_exit,.Lsie_fault)
 | 
						EX_TABLE(sie_exit,.Lsie_fault)
 | 
				
			||||||
EXPORT_SYMBOL(sie64a)
 | 
					EXPORT_SYMBOL(sie64a)
 | 
				
			||||||
EXPORT_SYMBOL(sie_exit)
 | 
					EXPORT_SYMBOL(sie_exit)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2160,7 +2160,7 @@ static int modify_ais_mode(struct kvm *kvm, struct kvm_device_attr *attr)
 | 
				
			||||||
	struct kvm_s390_ais_req req;
 | 
						struct kvm_s390_ais_req req;
 | 
				
			||||||
	int ret = 0;
 | 
						int ret = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!fi->ais_enabled)
 | 
						if (!test_kvm_facility(kvm, 72))
 | 
				
			||||||
		return -ENOTSUPP;
 | 
							return -ENOTSUPP;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (copy_from_user(&req, (void __user *)attr->addr, sizeof(req)))
 | 
						if (copy_from_user(&req, (void __user *)attr->addr, sizeof(req)))
 | 
				
			||||||
| 
						 | 
					@ -2204,7 +2204,7 @@ static int kvm_s390_inject_airq(struct kvm *kvm,
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
	int ret = 0;
 | 
						int ret = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!fi->ais_enabled || !adapter->suppressible)
 | 
						if (!test_kvm_facility(kvm, 72) || !adapter->suppressible)
 | 
				
			||||||
		return kvm_s390_inject_vm(kvm, &s390int);
 | 
							return kvm_s390_inject_vm(kvm, &s390int);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	mutex_lock(&fi->ais_lock);
 | 
						mutex_lock(&fi->ais_lock);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -558,7 +558,6 @@ static int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap)
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			set_kvm_facility(kvm->arch.model.fac_mask, 72);
 | 
								set_kvm_facility(kvm->arch.model.fac_mask, 72);
 | 
				
			||||||
			set_kvm_facility(kvm->arch.model.fac_list, 72);
 | 
								set_kvm_facility(kvm->arch.model.fac_list, 72);
 | 
				
			||||||
			kvm->arch.float_int.ais_enabled = 1;
 | 
					 | 
				
			||||||
			r = 0;
 | 
								r = 0;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		mutex_unlock(&kvm->lock);
 | 
							mutex_unlock(&kvm->lock);
 | 
				
			||||||
| 
						 | 
					@ -1533,7 +1532,6 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
 | 
				
			||||||
	mutex_init(&kvm->arch.float_int.ais_lock);
 | 
						mutex_init(&kvm->arch.float_int.ais_lock);
 | 
				
			||||||
	kvm->arch.float_int.simm = 0;
 | 
						kvm->arch.float_int.simm = 0;
 | 
				
			||||||
	kvm->arch.float_int.nimm = 0;
 | 
						kvm->arch.float_int.nimm = 0;
 | 
				
			||||||
	kvm->arch.float_int.ais_enabled = 0;
 | 
					 | 
				
			||||||
	spin_lock_init(&kvm->arch.float_int.lock);
 | 
						spin_lock_init(&kvm->arch.float_int.lock);
 | 
				
			||||||
	for (i = 0; i < FIRQ_LIST_COUNT; i++)
 | 
						for (i = 0; i < FIRQ_LIST_COUNT; i++)
 | 
				
			||||||
		INIT_LIST_HEAD(&kvm->arch.float_int.lists[i]);
 | 
							INIT_LIST_HEAD(&kvm->arch.float_int.lists[i]);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -101,7 +101,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
 | 
				
			||||||
		addr = PAGE_ALIGN(addr);
 | 
							addr = PAGE_ALIGN(addr);
 | 
				
			||||||
		vma = find_vma(mm, addr);
 | 
							vma = find_vma(mm, addr);
 | 
				
			||||||
		if (TASK_SIZE - len >= addr && addr >= mmap_min_addr &&
 | 
							if (TASK_SIZE - len >= addr && addr >= mmap_min_addr &&
 | 
				
			||||||
		    (!vma || addr + len <= vma->vm_start))
 | 
							    (!vma || addr + len <= vm_start_gap(vma)))
 | 
				
			||||||
			goto check_asce_limit;
 | 
								goto check_asce_limit;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -151,7 +151,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
 | 
				
			||||||
		addr = PAGE_ALIGN(addr);
 | 
							addr = PAGE_ALIGN(addr);
 | 
				
			||||||
		vma = find_vma(mm, addr);
 | 
							vma = find_vma(mm, addr);
 | 
				
			||||||
		if (TASK_SIZE - len >= addr && addr >= mmap_min_addr &&
 | 
							if (TASK_SIZE - len >= addr && addr >= mmap_min_addr &&
 | 
				
			||||||
				(!vma || addr + len <= vma->vm_start))
 | 
									(!vma || addr + len <= vm_start_gap(vma)))
 | 
				
			||||||
			goto check_asce_limit;
 | 
								goto check_asce_limit;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -64,7 +64,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		vma = find_vma(mm, addr);
 | 
							vma = find_vma(mm, addr);
 | 
				
			||||||
		if (TASK_SIZE - len >= addr &&
 | 
							if (TASK_SIZE - len >= addr &&
 | 
				
			||||||
		    (!vma || addr + len <= vma->vm_start))
 | 
							    (!vma || addr + len <= vm_start_gap(vma)))
 | 
				
			||||||
			return addr;
 | 
								return addr;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -114,7 +114,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		vma = find_vma(mm, addr);
 | 
							vma = find_vma(mm, addr);
 | 
				
			||||||
		if (TASK_SIZE - len >= addr &&
 | 
							if (TASK_SIZE - len >= addr &&
 | 
				
			||||||
		    (!vma || addr + len <= vma->vm_start))
 | 
							    (!vma || addr + len <= vm_start_gap(vma)))
 | 
				
			||||||
			return addr;
 | 
								return addr;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -577,9 +577,6 @@ config SYSVIPC_COMPAT
 | 
				
			||||||
	depends on COMPAT && SYSVIPC
 | 
						depends on COMPAT && SYSVIPC
 | 
				
			||||||
	default y
 | 
						default y
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config KEYS_COMPAT
 | 
					 | 
				
			||||||
	def_bool y if COMPAT && KEYS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
endmenu
 | 
					endmenu
 | 
				
			||||||
 | 
					
 | 
				
			||||||
source "net/Kconfig"
 | 
					source "net/Kconfig"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -120,7 +120,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		vma = find_vma(mm, addr);
 | 
							vma = find_vma(mm, addr);
 | 
				
			||||||
		if (task_size - len >= addr &&
 | 
							if (task_size - len >= addr &&
 | 
				
			||||||
		    (!vma || addr + len <= vma->vm_start))
 | 
							    (!vma || addr + len <= vm_start_gap(vma)))
 | 
				
			||||||
			return addr;
 | 
								return addr;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -183,7 +183,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		vma = find_vma(mm, addr);
 | 
							vma = find_vma(mm, addr);
 | 
				
			||||||
		if (task_size - len >= addr &&
 | 
							if (task_size - len >= addr &&
 | 
				
			||||||
		    (!vma || addr + len <= vma->vm_start))
 | 
							    (!vma || addr + len <= vm_start_gap(vma)))
 | 
				
			||||||
			return addr;
 | 
								return addr;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -120,7 +120,7 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
 | 
				
			||||||
		addr = ALIGN(addr, huge_page_size(h));
 | 
							addr = ALIGN(addr, huge_page_size(h));
 | 
				
			||||||
		vma = find_vma(mm, addr);
 | 
							vma = find_vma(mm, addr);
 | 
				
			||||||
		if (task_size - len >= addr &&
 | 
							if (task_size - len >= addr &&
 | 
				
			||||||
		    (!vma || addr + len <= vma->vm_start))
 | 
							    (!vma || addr + len <= vm_start_gap(vma)))
 | 
				
			||||||
			return addr;
 | 
								return addr;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (mm->get_unmapped_area == arch_get_unmapped_area)
 | 
						if (mm->get_unmapped_area == arch_get_unmapped_area)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -233,7 +233,7 @@ unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
 | 
				
			||||||
		addr = ALIGN(addr, huge_page_size(h));
 | 
							addr = ALIGN(addr, huge_page_size(h));
 | 
				
			||||||
		vma = find_vma(mm, addr);
 | 
							vma = find_vma(mm, addr);
 | 
				
			||||||
		if (TASK_SIZE - len >= addr &&
 | 
							if (TASK_SIZE - len >= addr &&
 | 
				
			||||||
		    (!vma || addr + len <= vma->vm_start))
 | 
							    (!vma || addr + len <= vm_start_gap(vma)))
 | 
				
			||||||
			return addr;
 | 
								return addr;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (current->mm->get_unmapped_area == arch_get_unmapped_area)
 | 
						if (current->mm->get_unmapped_area == arch_get_unmapped_area)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2776,10 +2776,6 @@ config COMPAT_FOR_U64_ALIGNMENT
 | 
				
			||||||
config SYSVIPC_COMPAT
 | 
					config SYSVIPC_COMPAT
 | 
				
			||||||
	def_bool y
 | 
						def_bool y
 | 
				
			||||||
	depends on SYSVIPC
 | 
						depends on SYSVIPC
 | 
				
			||||||
 | 
					 | 
				
			||||||
config KEYS_COMPAT
 | 
					 | 
				
			||||||
	def_bool y
 | 
					 | 
				
			||||||
	depends on KEYS
 | 
					 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
endmenu
 | 
					endmenu
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,6 +29,7 @@ struct pt_regs;
 | 
				
			||||||
	} while (0)
 | 
						} while (0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern int fixup_exception(struct pt_regs *regs, int trapnr);
 | 
					extern int fixup_exception(struct pt_regs *regs, int trapnr);
 | 
				
			||||||
 | 
					extern int fixup_bug(struct pt_regs *regs, int trapnr);
 | 
				
			||||||
extern bool ex_has_fault_handler(unsigned long ip);
 | 
					extern bool ex_has_fault_handler(unsigned long ip);
 | 
				
			||||||
extern void early_fixup_exception(struct pt_regs *regs, int trapnr);
 | 
					extern void early_fixup_exception(struct pt_regs *regs, int trapnr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -161,8 +161,8 @@ void kvm_async_pf_task_wait(u32 token)
 | 
				
			||||||
			 */
 | 
								 */
 | 
				
			||||||
			rcu_irq_exit();
 | 
								rcu_irq_exit();
 | 
				
			||||||
			native_safe_halt();
 | 
								native_safe_halt();
 | 
				
			||||||
			rcu_irq_enter();
 | 
					 | 
				
			||||||
			local_irq_disable();
 | 
								local_irq_disable();
 | 
				
			||||||
 | 
								rcu_irq_enter();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (!n.halted)
 | 
						if (!n.halted)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -144,7 +144,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
 | 
				
			||||||
		addr = PAGE_ALIGN(addr);
 | 
							addr = PAGE_ALIGN(addr);
 | 
				
			||||||
		vma = find_vma(mm, addr);
 | 
							vma = find_vma(mm, addr);
 | 
				
			||||||
		if (end - len >= addr &&
 | 
							if (end - len >= addr &&
 | 
				
			||||||
		    (!vma || addr + len <= vma->vm_start))
 | 
							    (!vma || addr + len <= vm_start_gap(vma)))
 | 
				
			||||||
			return addr;
 | 
								return addr;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -187,7 +187,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
 | 
				
			||||||
		addr = PAGE_ALIGN(addr);
 | 
							addr = PAGE_ALIGN(addr);
 | 
				
			||||||
		vma = find_vma(mm, addr);
 | 
							vma = find_vma(mm, addr);
 | 
				
			||||||
		if (TASK_SIZE - len >= addr &&
 | 
							if (TASK_SIZE - len >= addr &&
 | 
				
			||||||
				(!vma || addr + len <= vma->vm_start))
 | 
									(!vma || addr + len <= vm_start_gap(vma)))
 | 
				
			||||||
			return addr;
 | 
								return addr;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -182,7 +182,7 @@ int is_valid_bugaddr(unsigned long addr)
 | 
				
			||||||
	return ud == INSN_UD0 || ud == INSN_UD2;
 | 
						return ud == INSN_UD0 || ud == INSN_UD2;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int fixup_bug(struct pt_regs *regs, int trapnr)
 | 
					int fixup_bug(struct pt_regs *regs, int trapnr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (trapnr != X86_TRAP_UD)
 | 
						if (trapnr != X86_TRAP_UD)
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -780,18 +780,20 @@ int kvm_dev_ioctl_get_cpuid(struct kvm_cpuid2 *cpuid,
 | 
				
			||||||
static int move_to_next_stateful_cpuid_entry(struct kvm_vcpu *vcpu, int i)
 | 
					static int move_to_next_stateful_cpuid_entry(struct kvm_vcpu *vcpu, int i)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct kvm_cpuid_entry2 *e = &vcpu->arch.cpuid_entries[i];
 | 
						struct kvm_cpuid_entry2 *e = &vcpu->arch.cpuid_entries[i];
 | 
				
			||||||
	int j, nent = vcpu->arch.cpuid_nent;
 | 
						struct kvm_cpuid_entry2 *ej;
 | 
				
			||||||
 | 
						int j = i;
 | 
				
			||||||
 | 
						int nent = vcpu->arch.cpuid_nent;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	e->flags &= ~KVM_CPUID_FLAG_STATE_READ_NEXT;
 | 
						e->flags &= ~KVM_CPUID_FLAG_STATE_READ_NEXT;
 | 
				
			||||||
	/* when no next entry is found, the current entry[i] is reselected */
 | 
						/* when no next entry is found, the current entry[i] is reselected */
 | 
				
			||||||
	for (j = i + 1; ; j = (j + 1) % nent) {
 | 
						do {
 | 
				
			||||||
		struct kvm_cpuid_entry2 *ej = &vcpu->arch.cpuid_entries[j];
 | 
							j = (j + 1) % nent;
 | 
				
			||||||
		if (ej->function == e->function) {
 | 
							ej = &vcpu->arch.cpuid_entries[j];
 | 
				
			||||||
 | 
						} while (ej->function != e->function);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ej->flags |= KVM_CPUID_FLAG_STATE_READ_NEXT;
 | 
						ej->flags |= KVM_CPUID_FLAG_STATE_READ_NEXT;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return j;
 | 
						return j;
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return 0; /* silence gcc, even though control never reaches here */
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* find an entry with matching function, matching index (if needed), and that
 | 
					/* find an entry with matching function, matching index (if needed), and that
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3698,12 +3698,15 @@ static int kvm_arch_setup_async_pf(struct kvm_vcpu *vcpu, gva_t gva, gfn_t gfn)
 | 
				
			||||||
	return kvm_setup_async_pf(vcpu, gva, kvm_vcpu_gfn_to_hva(vcpu, gfn), &arch);
 | 
						return kvm_setup_async_pf(vcpu, gva, kvm_vcpu_gfn_to_hva(vcpu, gfn), &arch);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static bool can_do_async_pf(struct kvm_vcpu *vcpu)
 | 
					bool kvm_can_do_async_pf(struct kvm_vcpu *vcpu)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (unlikely(!lapic_in_kernel(vcpu) ||
 | 
						if (unlikely(!lapic_in_kernel(vcpu) ||
 | 
				
			||||||
		     kvm_event_needs_reinjection(vcpu)))
 | 
							     kvm_event_needs_reinjection(vcpu)))
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (is_guest_mode(vcpu))
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return kvm_x86_ops->interrupt_allowed(vcpu);
 | 
						return kvm_x86_ops->interrupt_allowed(vcpu);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3719,7 +3722,7 @@ static bool try_async_pf(struct kvm_vcpu *vcpu, bool prefault, gfn_t gfn,
 | 
				
			||||||
	if (!async)
 | 
						if (!async)
 | 
				
			||||||
		return false; /* *pfn has correct page already */
 | 
							return false; /* *pfn has correct page already */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!prefault && can_do_async_pf(vcpu)) {
 | 
						if (!prefault && kvm_can_do_async_pf(vcpu)) {
 | 
				
			||||||
		trace_kvm_try_async_get_page(gva, gfn);
 | 
							trace_kvm_try_async_get_page(gva, gfn);
 | 
				
			||||||
		if (kvm_find_async_pf_gfn(vcpu, gfn)) {
 | 
							if (kvm_find_async_pf_gfn(vcpu, gfn)) {
 | 
				
			||||||
			trace_kvm_async_pf_doublefault(gva, gfn);
 | 
								trace_kvm_async_pf_doublefault(gva, gfn);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -76,6 +76,7 @@ int handle_mmio_page_fault(struct kvm_vcpu *vcpu, u64 addr, bool direct);
 | 
				
			||||||
void kvm_init_shadow_mmu(struct kvm_vcpu *vcpu);
 | 
					void kvm_init_shadow_mmu(struct kvm_vcpu *vcpu);
 | 
				
			||||||
void kvm_init_shadow_ept_mmu(struct kvm_vcpu *vcpu, bool execonly,
 | 
					void kvm_init_shadow_ept_mmu(struct kvm_vcpu *vcpu, bool execonly,
 | 
				
			||||||
			     bool accessed_dirty);
 | 
								     bool accessed_dirty);
 | 
				
			||||||
 | 
					bool kvm_can_do_async_pf(struct kvm_vcpu *vcpu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline unsigned int kvm_mmu_available_pages(struct kvm *kvm)
 | 
					static inline unsigned int kvm_mmu_available_pages(struct kvm *kvm)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2427,7 +2427,7 @@ static int nested_vmx_check_exception(struct kvm_vcpu *vcpu, unsigned nr)
 | 
				
			||||||
	if (!(vmcs12->exception_bitmap & (1u << nr)))
 | 
						if (!(vmcs12->exception_bitmap & (1u << nr)))
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	nested_vmx_vmexit(vcpu, to_vmx(vcpu)->exit_reason,
 | 
						nested_vmx_vmexit(vcpu, EXIT_REASON_EXCEPTION_NMI,
 | 
				
			||||||
			  vmcs_read32(VM_EXIT_INTR_INFO),
 | 
								  vmcs_read32(VM_EXIT_INTR_INFO),
 | 
				
			||||||
			  vmcs_readl(EXIT_QUALIFICATION));
 | 
								  vmcs_readl(EXIT_QUALIFICATION));
 | 
				
			||||||
	return 1;
 | 
						return 1;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8607,8 +8607,7 @@ bool kvm_arch_can_inject_async_page_present(struct kvm_vcpu *vcpu)
 | 
				
			||||||
	if (!(vcpu->arch.apf.msr_val & KVM_ASYNC_PF_ENABLED))
 | 
						if (!(vcpu->arch.apf.msr_val & KVM_ASYNC_PF_ENABLED))
 | 
				
			||||||
		return true;
 | 
							return true;
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		return !kvm_event_needs_reinjection(vcpu) &&
 | 
							return kvm_can_do_async_pf(vcpu);
 | 
				
			||||||
			kvm_x86_ops->interrupt_allowed(vcpu);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void kvm_arch_start_assignment(struct kvm *kvm)
 | 
					void kvm_arch_start_assignment(struct kvm *kvm)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -162,6 +162,9 @@ void __init early_fixup_exception(struct pt_regs *regs, int trapnr)
 | 
				
			||||||
	if (fixup_exception(regs, trapnr))
 | 
						if (fixup_exception(regs, trapnr))
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (fixup_bug(regs, trapnr))
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fail:
 | 
					fail:
 | 
				
			||||||
	early_printk("PANIC: early exception 0x%02x IP %lx:%lx error %lx cr2 0x%lx\n",
 | 
						early_printk("PANIC: early exception 0x%02x IP %lx:%lx error %lx cr2 0x%lx\n",
 | 
				
			||||||
		     (unsigned)trapnr, (unsigned long)regs->cs, regs->ip,
 | 
							     (unsigned)trapnr, (unsigned long)regs->cs, regs->ip,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -148,7 +148,7 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
 | 
				
			||||||
		addr = ALIGN(addr, huge_page_size(h));
 | 
							addr = ALIGN(addr, huge_page_size(h));
 | 
				
			||||||
		vma = find_vma(mm, addr);
 | 
							vma = find_vma(mm, addr);
 | 
				
			||||||
		if (TASK_SIZE - len >= addr &&
 | 
							if (TASK_SIZE - len >= addr &&
 | 
				
			||||||
		    (!vma || addr + len <= vma->vm_start))
 | 
							    (!vma || addr + len <= vm_start_gap(vma)))
 | 
				
			||||||
			return addr;
 | 
								return addr;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (mm->get_unmapped_area == arch_get_unmapped_area)
 | 
						if (mm->get_unmapped_area == arch_get_unmapped_area)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -161,16 +161,16 @@ static int page_size_mask;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void __init probe_page_size_mask(void)
 | 
					static void __init probe_page_size_mask(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#if !defined(CONFIG_KMEMCHECK)
 | 
					 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * For CONFIG_KMEMCHECK or pagealloc debugging, identity mapping will
 | 
						 * For CONFIG_KMEMCHECK or pagealloc debugging, identity mapping will
 | 
				
			||||||
	 * use small pages.
 | 
						 * use small pages.
 | 
				
			||||||
	 * This will simplify cpa(), which otherwise needs to support splitting
 | 
						 * This will simplify cpa(), which otherwise needs to support splitting
 | 
				
			||||||
	 * large pages into small in interrupt context, etc.
 | 
						 * large pages into small in interrupt context, etc.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	if (boot_cpu_has(X86_FEATURE_PSE) && !debug_pagealloc_enabled())
 | 
						if (boot_cpu_has(X86_FEATURE_PSE) && !debug_pagealloc_enabled() && !IS_ENABLED(CONFIG_KMEMCHECK))
 | 
				
			||||||
		page_size_mask |= 1 << PG_LEVEL_2M;
 | 
							page_size_mask |= 1 << PG_LEVEL_2M;
 | 
				
			||||||
#endif
 | 
						else
 | 
				
			||||||
 | 
							direct_gbpages = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Enable PSE if available */
 | 
						/* Enable PSE if available */
 | 
				
			||||||
	if (boot_cpu_has(X86_FEATURE_PSE))
 | 
						if (boot_cpu_has(X86_FEATURE_PSE))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,7 +29,8 @@ static inline void variant_irq_disable(unsigned int irq) { }
 | 
				
			||||||
# define PLATFORM_NR_IRQS 0
 | 
					# define PLATFORM_NR_IRQS 0
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#define XTENSA_NR_IRQS XCHAL_NUM_INTERRUPTS
 | 
					#define XTENSA_NR_IRQS XCHAL_NUM_INTERRUPTS
 | 
				
			||||||
#define NR_IRQS (XTENSA_NR_IRQS + VARIANT_NR_IRQS + PLATFORM_NR_IRQS)
 | 
					#define NR_IRQS (XTENSA_NR_IRQS + VARIANT_NR_IRQS + PLATFORM_NR_IRQS + 1)
 | 
				
			||||||
 | 
					#define XTENSA_PIC_LINUX_IRQ(hwirq) ((hwirq) + 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if VARIANT_NR_IRQS == 0
 | 
					#if VARIANT_NR_IRQS == 0
 | 
				
			||||||
static inline void variant_init_irq(void) { }
 | 
					static inline void variant_init_irq(void) { }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,11 +34,6 @@ asmlinkage void do_IRQ(int hwirq, struct pt_regs *regs)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int irq = irq_find_mapping(NULL, hwirq);
 | 
						int irq = irq_find_mapping(NULL, hwirq);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (hwirq >= NR_IRQS) {
 | 
					 | 
				
			||||||
		printk(KERN_EMERG "%s: cannot handle IRQ %d\n",
 | 
					 | 
				
			||||||
				__func__, hwirq);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef CONFIG_DEBUG_STACKOVERFLOW
 | 
					#ifdef CONFIG_DEBUG_STACKOVERFLOW
 | 
				
			||||||
	/* Debugging check for stack overflow: is there less than 1KB free? */
 | 
						/* Debugging check for stack overflow: is there less than 1KB free? */
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -593,8 +593,7 @@ c_show(struct seq_file *f, void *slot)
 | 
				
			||||||
		      (ccount_freq/10000) % 100,
 | 
							      (ccount_freq/10000) % 100,
 | 
				
			||||||
		      loops_per_jiffy/(500000/HZ),
 | 
							      loops_per_jiffy/(500000/HZ),
 | 
				
			||||||
		      (loops_per_jiffy/(5000/HZ)) % 100);
 | 
							      (loops_per_jiffy/(5000/HZ)) % 100);
 | 
				
			||||||
 | 
						seq_puts(f, "flags\t\t: "
 | 
				
			||||||
	seq_printf(f,"flags\t\t: "
 | 
					 | 
				
			||||||
#if XCHAL_HAVE_NMI
 | 
					#if XCHAL_HAVE_NMI
 | 
				
			||||||
		     "nmi "
 | 
							     "nmi "
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -88,7 +88,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
 | 
				
			||||||
		/* At this point:  (!vmm || addr < vmm->vm_end). */
 | 
							/* At this point:  (!vmm || addr < vmm->vm_end). */
 | 
				
			||||||
		if (TASK_SIZE - len < addr)
 | 
							if (TASK_SIZE - len < addr)
 | 
				
			||||||
			return -ENOMEM;
 | 
								return -ENOMEM;
 | 
				
			||||||
		if (!vmm || addr + len <= vmm->vm_start)
 | 
							if (!vmm || addr + len <= vm_start_gap(vmm))
 | 
				
			||||||
			return addr;
 | 
								return addr;
 | 
				
			||||||
		addr = vmm->vm_end;
 | 
							addr = vmm->vm_end;
 | 
				
			||||||
		if (flags & MAP_SHARED)
 | 
							if (flags & MAP_SHARED)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -118,7 +118,7 @@ SECTIONS
 | 
				
			||||||
  SECTION_VECTOR (.KernelExceptionVector.text, KERNEL_VECTOR_VADDR)
 | 
					  SECTION_VECTOR (.KernelExceptionVector.text, KERNEL_VECTOR_VADDR)
 | 
				
			||||||
  SECTION_VECTOR (.UserExceptionVector.literal, USER_VECTOR_VADDR - 4)
 | 
					  SECTION_VECTOR (.UserExceptionVector.literal, USER_VECTOR_VADDR - 4)
 | 
				
			||||||
  SECTION_VECTOR (.UserExceptionVector.text, USER_VECTOR_VADDR)
 | 
					  SECTION_VECTOR (.UserExceptionVector.text, USER_VECTOR_VADDR)
 | 
				
			||||||
  SECTION_VECTOR (.DoubleExceptionVector.literal, DOUBLEEXC_VECTOR_VADDR - 48)
 | 
					  SECTION_VECTOR (.DoubleExceptionVector.literal, DOUBLEEXC_VECTOR_VADDR - 20)
 | 
				
			||||||
  SECTION_VECTOR (.DoubleExceptionVector.text, DOUBLEEXC_VECTOR_VADDR)
 | 
					  SECTION_VECTOR (.DoubleExceptionVector.text, DOUBLEEXC_VECTOR_VADDR)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -306,13 +306,13 @@ SECTIONS
 | 
				
			||||||
		  .UserExceptionVector.literal)
 | 
							  .UserExceptionVector.literal)
 | 
				
			||||||
  SECTION_VECTOR (_DoubleExceptionVector_literal,
 | 
					  SECTION_VECTOR (_DoubleExceptionVector_literal,
 | 
				
			||||||
		  .DoubleExceptionVector.literal,
 | 
							  .DoubleExceptionVector.literal,
 | 
				
			||||||
		  DOUBLEEXC_VECTOR_VADDR - 48,
 | 
							  DOUBLEEXC_VECTOR_VADDR - 20,
 | 
				
			||||||
		  SIZEOF(.UserExceptionVector.text),
 | 
							  SIZEOF(.UserExceptionVector.text),
 | 
				
			||||||
		  .UserExceptionVector.text)
 | 
							  .UserExceptionVector.text)
 | 
				
			||||||
  SECTION_VECTOR (_DoubleExceptionVector_text,
 | 
					  SECTION_VECTOR (_DoubleExceptionVector_text,
 | 
				
			||||||
		  .DoubleExceptionVector.text,
 | 
							  .DoubleExceptionVector.text,
 | 
				
			||||||
		  DOUBLEEXC_VECTOR_VADDR,
 | 
							  DOUBLEEXC_VECTOR_VADDR,
 | 
				
			||||||
		  48,
 | 
							  20,
 | 
				
			||||||
		  .DoubleExceptionVector.literal)
 | 
							  .DoubleExceptionVector.literal)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  . = (LOADADDR( .DoubleExceptionVector.text ) + SIZEOF( .DoubleExceptionVector.text ) + 3) & ~ 3;
 | 
					  . = (LOADADDR( .DoubleExceptionVector.text ) + SIZEOF( .DoubleExceptionVector.text ) + 3) & ~ 3;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -317,8 +317,7 @@ static int __init simdisk_init(void)
 | 
				
			||||||
	if (simdisk_count > MAX_SIMDISK_COUNT)
 | 
						if (simdisk_count > MAX_SIMDISK_COUNT)
 | 
				
			||||||
		simdisk_count = MAX_SIMDISK_COUNT;
 | 
							simdisk_count = MAX_SIMDISK_COUNT;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sddev = kmalloc(simdisk_count * sizeof(struct simdisk),
 | 
						sddev = kmalloc_array(simdisk_count, sizeof(*sddev), GFP_KERNEL);
 | 
				
			||||||
			GFP_KERNEL);
 | 
					 | 
				
			||||||
	if (sddev == NULL)
 | 
						if (sddev == NULL)
 | 
				
			||||||
		goto out_unregister;
 | 
							goto out_unregister;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,16 +24,18 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Interrupt configuration. */
 | 
					/* Interrupt configuration. */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define PLATFORM_NR_IRQS	10
 | 
					#define PLATFORM_NR_IRQS	0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Default assignment of LX60 devices to external interrupts. */
 | 
					/* Default assignment of LX60 devices to external interrupts. */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_XTENSA_MX
 | 
					#ifdef CONFIG_XTENSA_MX
 | 
				
			||||||
#define DUART16552_INTNUM	XCHAL_EXTINT3_NUM
 | 
					#define DUART16552_INTNUM	XCHAL_EXTINT3_NUM
 | 
				
			||||||
#define OETH_IRQ		XCHAL_EXTINT4_NUM
 | 
					#define OETH_IRQ		XCHAL_EXTINT4_NUM
 | 
				
			||||||
 | 
					#define C67X00_IRQ		XCHAL_EXTINT8_NUM
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#define DUART16552_INTNUM	XCHAL_EXTINT0_NUM
 | 
					#define DUART16552_INTNUM	XCHAL_EXTINT0_NUM
 | 
				
			||||||
#define OETH_IRQ		XCHAL_EXTINT1_NUM
 | 
					#define OETH_IRQ		XCHAL_EXTINT1_NUM
 | 
				
			||||||
 | 
					#define C67X00_IRQ		XCHAL_EXTINT5_NUM
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					@ -63,5 +65,5 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define C67X00_PADDR		(XCHAL_KIO_PADDR + 0x0D0D0000)
 | 
					#define C67X00_PADDR		(XCHAL_KIO_PADDR + 0x0D0D0000)
 | 
				
			||||||
#define C67X00_SIZE		0x10
 | 
					#define C67X00_SIZE		0x10
 | 
				
			||||||
#define C67X00_IRQ		5
 | 
					
 | 
				
			||||||
#endif /* __XTENSA_XTAVNET_HARDWARE_H */
 | 
					#endif /* __XTENSA_XTAVNET_HARDWARE_H */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -175,8 +175,8 @@ static struct resource ethoc_res[] = {
 | 
				
			||||||
		.flags = IORESOURCE_MEM,
 | 
							.flags = IORESOURCE_MEM,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	[2] = { /* IRQ number */
 | 
						[2] = { /* IRQ number */
 | 
				
			||||||
		.start = OETH_IRQ,
 | 
							.start = XTENSA_PIC_LINUX_IRQ(OETH_IRQ),
 | 
				
			||||||
		.end   = OETH_IRQ,
 | 
							.end   = XTENSA_PIC_LINUX_IRQ(OETH_IRQ),
 | 
				
			||||||
		.flags = IORESOURCE_IRQ,
 | 
							.flags = IORESOURCE_IRQ,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -213,8 +213,8 @@ static struct resource c67x00_res[] = {
 | 
				
			||||||
		.flags = IORESOURCE_MEM,
 | 
							.flags = IORESOURCE_MEM,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	[1] = { /* IRQ number */
 | 
						[1] = { /* IRQ number */
 | 
				
			||||||
		.start = C67X00_IRQ,
 | 
							.start = XTENSA_PIC_LINUX_IRQ(C67X00_IRQ),
 | 
				
			||||||
		.end   = C67X00_IRQ,
 | 
							.end   = XTENSA_PIC_LINUX_IRQ(C67X00_IRQ),
 | 
				
			||||||
		.flags = IORESOURCE_IRQ,
 | 
							.flags = IORESOURCE_IRQ,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -247,7 +247,7 @@ static struct resource serial_resource = {
 | 
				
			||||||
static struct plat_serial8250_port serial_platform_data[] = {
 | 
					static struct plat_serial8250_port serial_platform_data[] = {
 | 
				
			||||||
	[0] = {
 | 
						[0] = {
 | 
				
			||||||
		.mapbase	= DUART16552_PADDR,
 | 
							.mapbase	= DUART16552_PADDR,
 | 
				
			||||||
		.irq		= DUART16552_INTNUM,
 | 
							.irq		= XTENSA_PIC_LINUX_IRQ(DUART16552_INTNUM),
 | 
				
			||||||
		.flags		= UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |
 | 
							.flags		= UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |
 | 
				
			||||||
				  UPF_IOREMAP,
 | 
									  UPF_IOREMAP,
 | 
				
			||||||
		.iotype		= XCHAL_HAVE_BE ? UPIO_MEM32BE : UPIO_MEM32,
 | 
							.iotype		= XCHAL_HAVE_BE ? UPIO_MEM32BE : UPIO_MEM32,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -68,6 +68,45 @@ static void blk_mq_sched_assign_ioc(struct request_queue *q,
 | 
				
			||||||
		__blk_mq_sched_assign_ioc(q, rq, bio, ioc);
 | 
							__blk_mq_sched_assign_ioc(q, rq, bio, ioc);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Mark a hardware queue as needing a restart. For shared queues, maintain
 | 
				
			||||||
 | 
					 * a count of how many hardware queues are marked for restart.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					static void blk_mq_sched_mark_restart_hctx(struct blk_mq_hw_ctx *hctx)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (test_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state))
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (hctx->flags & BLK_MQ_F_TAG_SHARED) {
 | 
				
			||||||
 | 
							struct request_queue *q = hctx->queue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (!test_and_set_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state))
 | 
				
			||||||
 | 
								atomic_inc(&q->shared_hctx_restart);
 | 
				
			||||||
 | 
						} else
 | 
				
			||||||
 | 
							set_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static bool blk_mq_sched_restart_hctx(struct blk_mq_hw_ctx *hctx)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (!test_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state))
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (hctx->flags & BLK_MQ_F_TAG_SHARED) {
 | 
				
			||||||
 | 
							struct request_queue *q = hctx->queue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (test_and_clear_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state))
 | 
				
			||||||
 | 
								atomic_dec(&q->shared_hctx_restart);
 | 
				
			||||||
 | 
						} else
 | 
				
			||||||
 | 
							clear_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (blk_mq_hctx_has_pending(hctx)) {
 | 
				
			||||||
 | 
							blk_mq_run_hw_queue(hctx, true);
 | 
				
			||||||
 | 
							return true;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct request *blk_mq_sched_get_request(struct request_queue *q,
 | 
					struct request *blk_mq_sched_get_request(struct request_queue *q,
 | 
				
			||||||
					 struct bio *bio,
 | 
										 struct bio *bio,
 | 
				
			||||||
					 unsigned int op,
 | 
										 unsigned int op,
 | 
				
			||||||
| 
						 | 
					@ -266,18 +305,6 @@ static bool blk_mq_sched_bypass_insert(struct blk_mq_hw_ctx *hctx,
 | 
				
			||||||
	return true;
 | 
						return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static bool blk_mq_sched_restart_hctx(struct blk_mq_hw_ctx *hctx)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (test_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state)) {
 | 
					 | 
				
			||||||
		clear_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state);
 | 
					 | 
				
			||||||
		if (blk_mq_hctx_has_pending(hctx)) {
 | 
					 | 
				
			||||||
			blk_mq_run_hw_queue(hctx, true);
 | 
					 | 
				
			||||||
			return true;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return false;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * list_for_each_entry_rcu_rr - iterate in a round-robin fashion over rcu list
 | 
					 * list_for_each_entry_rcu_rr - iterate in a round-robin fashion over rcu list
 | 
				
			||||||
 * @pos:    loop cursor.
 | 
					 * @pos:    loop cursor.
 | 
				
			||||||
| 
						 | 
					@ -309,6 +336,13 @@ void blk_mq_sched_restart(struct blk_mq_hw_ctx *const hctx)
 | 
				
			||||||
	unsigned int i, j;
 | 
						unsigned int i, j;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (set->flags & BLK_MQ_F_TAG_SHARED) {
 | 
						if (set->flags & BLK_MQ_F_TAG_SHARED) {
 | 
				
			||||||
 | 
							/*
 | 
				
			||||||
 | 
							 * If this is 0, then we know that no hardware queues
 | 
				
			||||||
 | 
							 * have RESTART marked. We're done.
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							if (!atomic_read(&queue->shared_hctx_restart))
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		rcu_read_lock();
 | 
							rcu_read_lock();
 | 
				
			||||||
		list_for_each_entry_rcu_rr(q, queue, &set->tag_list,
 | 
							list_for_each_entry_rcu_rr(q, queue, &set->tag_list,
 | 
				
			||||||
					   tag_set_list) {
 | 
										   tag_set_list) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -115,15 +115,6 @@ static inline bool blk_mq_sched_has_work(struct blk_mq_hw_ctx *hctx)
 | 
				
			||||||
	return false;
 | 
						return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Mark a hardware queue as needing a restart.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
static inline void blk_mq_sched_mark_restart_hctx(struct blk_mq_hw_ctx *hctx)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (!test_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state))
 | 
					 | 
				
			||||||
		set_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static inline bool blk_mq_sched_needs_restart(struct blk_mq_hw_ctx *hctx)
 | 
					static inline bool blk_mq_sched_needs_restart(struct blk_mq_hw_ctx *hctx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return test_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state);
 | 
						return test_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2103,20 +2103,30 @@ static void blk_mq_map_swqueue(struct request_queue *q,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Caller needs to ensure that we're either frozen/quiesced, or that
 | 
				
			||||||
 | 
					 * the queue isn't live yet.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
static void queue_set_hctx_shared(struct request_queue *q, bool shared)
 | 
					static void queue_set_hctx_shared(struct request_queue *q, bool shared)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct blk_mq_hw_ctx *hctx;
 | 
						struct blk_mq_hw_ctx *hctx;
 | 
				
			||||||
	int i;
 | 
						int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	queue_for_each_hw_ctx(q, hctx, i) {
 | 
						queue_for_each_hw_ctx(q, hctx, i) {
 | 
				
			||||||
		if (shared)
 | 
							if (shared) {
 | 
				
			||||||
 | 
								if (test_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state))
 | 
				
			||||||
 | 
									atomic_inc(&q->shared_hctx_restart);
 | 
				
			||||||
			hctx->flags |= BLK_MQ_F_TAG_SHARED;
 | 
								hctx->flags |= BLK_MQ_F_TAG_SHARED;
 | 
				
			||||||
		else
 | 
							} else {
 | 
				
			||||||
 | 
								if (test_bit(BLK_MQ_S_SCHED_RESTART, &hctx->state))
 | 
				
			||||||
 | 
									atomic_dec(&q->shared_hctx_restart);
 | 
				
			||||||
			hctx->flags &= ~BLK_MQ_F_TAG_SHARED;
 | 
								hctx->flags &= ~BLK_MQ_F_TAG_SHARED;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void blk_mq_update_tag_set_depth(struct blk_mq_tag_set *set, bool shared)
 | 
					static void blk_mq_update_tag_set_depth(struct blk_mq_tag_set *set,
 | 
				
			||||||
 | 
										bool shared)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct request_queue *q;
 | 
						struct request_queue *q;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -777,24 +777,25 @@ static void blk_free_queue_rcu(struct rcu_head *rcu_head)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * blk_release_queue: - release a &struct request_queue when it is no longer needed
 | 
					 * __blk_release_queue - release a request queue when it is no longer needed
 | 
				
			||||||
 * @kobj:    the kobj belonging to the request queue to be released
 | 
					 * @work: pointer to the release_work member of the request queue to be released
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Description:
 | 
					 * Description:
 | 
				
			||||||
 *     blk_release_queue is the pair to blk_init_queue() or
 | 
					 *     blk_release_queue is the counterpart of blk_init_queue(). It should be
 | 
				
			||||||
 *     blk_queue_make_request().  It should be called when a request queue is
 | 
					 *     called when a request queue is being released; typically when a block
 | 
				
			||||||
 *     being released; typically when a block device is being de-registered.
 | 
					 *     device is being de-registered. Its primary task it to free the queue
 | 
				
			||||||
 *     Currently, its primary task it to free all the &struct request
 | 
					 *     itself.
 | 
				
			||||||
 *     structures that were allocated to the queue and the queue itself.
 | 
					 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Note:
 | 
					 * Notes:
 | 
				
			||||||
 *     The low level driver must have finished any outstanding requests first
 | 
					 *     The low level driver must have finished any outstanding requests first
 | 
				
			||||||
 *     via blk_cleanup_queue().
 | 
					 *     via blk_cleanup_queue().
 | 
				
			||||||
 **/
 | 
					 *
 | 
				
			||||||
static void blk_release_queue(struct kobject *kobj)
 | 
					 *     Although blk_release_queue() may be called with preemption disabled,
 | 
				
			||||||
 | 
					 *     __blk_release_queue() may sleep.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					static void __blk_release_queue(struct work_struct *work)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct request_queue *q =
 | 
						struct request_queue *q = container_of(work, typeof(*q), release_work);
 | 
				
			||||||
		container_of(kobj, struct request_queue, kobj);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (test_bit(QUEUE_FLAG_POLL_STATS, &q->queue_flags))
 | 
						if (test_bit(QUEUE_FLAG_POLL_STATS, &q->queue_flags))
 | 
				
			||||||
		blk_stat_remove_callback(q, q->poll_cb);
 | 
							blk_stat_remove_callback(q, q->poll_cb);
 | 
				
			||||||
| 
						 | 
					@ -834,6 +835,15 @@ static void blk_release_queue(struct kobject *kobj)
 | 
				
			||||||
	call_rcu(&q->rcu_head, blk_free_queue_rcu);
 | 
						call_rcu(&q->rcu_head, blk_free_queue_rcu);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void blk_release_queue(struct kobject *kobj)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct request_queue *q =
 | 
				
			||||||
 | 
							container_of(kobj, struct request_queue, kobj);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						INIT_WORK(&q->release_work, __blk_release_queue);
 | 
				
			||||||
 | 
						schedule_work(&q->release_work);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const struct sysfs_ops queue_sysfs_ops = {
 | 
					static const struct sysfs_ops queue_sysfs_ops = {
 | 
				
			||||||
	.show	= queue_attr_show,
 | 
						.show	= queue_attr_show,
 | 
				
			||||||
	.store	= queue_attr_store,
 | 
						.store	= queue_attr_store,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -381,7 +381,7 @@ static int pefile_digest_pe(const void *pebuf, unsigned int pelen,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
error:
 | 
					error:
 | 
				
			||||||
	kfree(desc);
 | 
						kzfree(desc);
 | 
				
			||||||
error_no_desc:
 | 
					error_no_desc:
 | 
				
			||||||
	crypto_free_shash(tfm);
 | 
						crypto_free_shash(tfm);
 | 
				
			||||||
	kleave(" = %d", ret);
 | 
						kleave(" = %d", ret);
 | 
				
			||||||
| 
						 | 
					@ -450,6 +450,6 @@ int verify_pefile_signature(const void *pebuf, unsigned pelen,
 | 
				
			||||||
	ret = pefile_digest_pe(pebuf, pelen, &ctx);
 | 
						ret = pefile_digest_pe(pebuf, pelen, &ctx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
error:
 | 
					error:
 | 
				
			||||||
	kfree(ctx.digest);
 | 
						kzfree(ctx.digest);
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -102,6 +102,7 @@ struct x509_certificate *x509_cert_parse(const void *data, size_t datalen)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ret = -ENOMEM;
 | 
				
			||||||
	cert->pub->key = kmemdup(ctx->key, ctx->key_size, GFP_KERNEL);
 | 
						cert->pub->key = kmemdup(ctx->key, ctx->key_size, GFP_KERNEL);
 | 
				
			||||||
	if (!cert->pub->key)
 | 
						if (!cert->pub->key)
 | 
				
			||||||
		goto error_decode;
 | 
							goto error_decode;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -416,9 +416,18 @@ acpi_tb_get_table(struct acpi_table_desc *table_desc,
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (table_desc->validation_count < ACPI_MAX_TABLE_VALIDATIONS) {
 | 
				
			||||||
		table_desc->validation_count++;
 | 
							table_desc->validation_count++;
 | 
				
			||||||
	if (table_desc->validation_count == 0) {
 | 
					
 | 
				
			||||||
		table_desc->validation_count--;
 | 
							/*
 | 
				
			||||||
 | 
							 * Detect validation_count overflows to ensure that the warning
 | 
				
			||||||
 | 
							 * message will only be printed once.
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							if (table_desc->validation_count >= ACPI_MAX_TABLE_VALIDATIONS) {
 | 
				
			||||||
 | 
								ACPI_WARNING((AE_INFO,
 | 
				
			||||||
 | 
									      "Table %p, Validation count overflows\n",
 | 
				
			||||||
 | 
									      table_desc));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	*out_table = table_desc->pointer;
 | 
						*out_table = table_desc->pointer;
 | 
				
			||||||
| 
						 | 
					@ -445,13 +454,20 @@ void acpi_tb_put_table(struct acpi_table_desc *table_desc)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ACPI_FUNCTION_TRACE(acpi_tb_put_table);
 | 
						ACPI_FUNCTION_TRACE(acpi_tb_put_table);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (table_desc->validation_count == 0) {
 | 
						if (table_desc->validation_count < ACPI_MAX_TABLE_VALIDATIONS) {
 | 
				
			||||||
 | 
							table_desc->validation_count--;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/*
 | 
				
			||||||
 | 
							 * Detect validation_count underflows to ensure that the warning
 | 
				
			||||||
 | 
							 * message will only be printed once.
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							if (table_desc->validation_count >= ACPI_MAX_TABLE_VALIDATIONS) {
 | 
				
			||||||
			ACPI_WARNING((AE_INFO,
 | 
								ACPI_WARNING((AE_INFO,
 | 
				
			||||||
			      "Table %p, Validation count is zero before decrement\n",
 | 
									      "Table %p, Validation count underflows\n",
 | 
				
			||||||
				      table_desc));
 | 
									      table_desc));
 | 
				
			||||||
			return_VOID;
 | 
								return_VOID;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	table_desc->validation_count--;
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (table_desc->validation_count == 0) {
 | 
						if (table_desc->validation_count == 0) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -474,15 +474,6 @@ acpi_ut_walk_aml_resources(struct acpi_walk_state *walk_state,
 | 
				
			||||||
				return_ACPI_STATUS(AE_AML_NO_RESOURCE_END_TAG);
 | 
									return_ACPI_STATUS(AE_AML_NO_RESOURCE_END_TAG);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			/*
 | 
					 | 
				
			||||||
			 * The end_tag opcode must be followed by a zero byte.
 | 
					 | 
				
			||||||
			 * Although this byte is technically defined to be a checksum,
 | 
					 | 
				
			||||||
			 * in practice, all ASL compilers set this byte to zero.
 | 
					 | 
				
			||||||
			 */
 | 
					 | 
				
			||||||
			if (*(aml + 1) != 0) {
 | 
					 | 
				
			||||||
				return_ACPI_STATUS(AE_AML_NO_RESOURCE_END_TAG);
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			/* Return the pointer to the end_tag if requested */
 | 
								/* Return the pointer to the end_tag if requested */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (!user_function) {
 | 
								if (!user_function) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -609,8 +609,6 @@ int xen_blkif_schedule(void *arg)
 | 
				
			||||||
	unsigned long timeout;
 | 
						unsigned long timeout;
 | 
				
			||||||
	int ret;
 | 
						int ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	xen_blkif_get(blkif);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	set_freezable();
 | 
						set_freezable();
 | 
				
			||||||
	while (!kthread_should_stop()) {
 | 
						while (!kthread_should_stop()) {
 | 
				
			||||||
		if (try_to_freeze())
 | 
							if (try_to_freeze())
 | 
				
			||||||
| 
						 | 
					@ -665,7 +663,6 @@ int xen_blkif_schedule(void *arg)
 | 
				
			||||||
		print_stats(ring);
 | 
							print_stats(ring);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ring->xenblkd = NULL;
 | 
						ring->xenblkd = NULL;
 | 
				
			||||||
	xen_blkif_put(blkif);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1436,34 +1433,35 @@ static int dispatch_rw_block_io(struct xen_blkif_ring *ring,
 | 
				
			||||||
static void make_response(struct xen_blkif_ring *ring, u64 id,
 | 
					static void make_response(struct xen_blkif_ring *ring, u64 id,
 | 
				
			||||||
			  unsigned short op, int st)
 | 
								  unsigned short op, int st)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct blkif_response  resp;
 | 
						struct blkif_response *resp;
 | 
				
			||||||
	unsigned long     flags;
 | 
						unsigned long     flags;
 | 
				
			||||||
	union blkif_back_rings *blk_rings;
 | 
						union blkif_back_rings *blk_rings;
 | 
				
			||||||
	int notify;
 | 
						int notify;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	resp.id        = id;
 | 
					 | 
				
			||||||
	resp.operation = op;
 | 
					 | 
				
			||||||
	resp.status    = st;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	spin_lock_irqsave(&ring->blk_ring_lock, flags);
 | 
						spin_lock_irqsave(&ring->blk_ring_lock, flags);
 | 
				
			||||||
	blk_rings = &ring->blk_rings;
 | 
						blk_rings = &ring->blk_rings;
 | 
				
			||||||
	/* Place on the response ring for the relevant domain. */
 | 
						/* Place on the response ring for the relevant domain. */
 | 
				
			||||||
	switch (ring->blkif->blk_protocol) {
 | 
						switch (ring->blkif->blk_protocol) {
 | 
				
			||||||
	case BLKIF_PROTOCOL_NATIVE:
 | 
						case BLKIF_PROTOCOL_NATIVE:
 | 
				
			||||||
		memcpy(RING_GET_RESPONSE(&blk_rings->native, blk_rings->native.rsp_prod_pvt),
 | 
							resp = RING_GET_RESPONSE(&blk_rings->native,
 | 
				
			||||||
		       &resp, sizeof(resp));
 | 
										 blk_rings->native.rsp_prod_pvt);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case BLKIF_PROTOCOL_X86_32:
 | 
						case BLKIF_PROTOCOL_X86_32:
 | 
				
			||||||
		memcpy(RING_GET_RESPONSE(&blk_rings->x86_32, blk_rings->x86_32.rsp_prod_pvt),
 | 
							resp = RING_GET_RESPONSE(&blk_rings->x86_32,
 | 
				
			||||||
		       &resp, sizeof(resp));
 | 
										 blk_rings->x86_32.rsp_prod_pvt);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case BLKIF_PROTOCOL_X86_64:
 | 
						case BLKIF_PROTOCOL_X86_64:
 | 
				
			||||||
		memcpy(RING_GET_RESPONSE(&blk_rings->x86_64, blk_rings->x86_64.rsp_prod_pvt),
 | 
							resp = RING_GET_RESPONSE(&blk_rings->x86_64,
 | 
				
			||||||
		       &resp, sizeof(resp));
 | 
										 blk_rings->x86_64.rsp_prod_pvt);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
		BUG();
 | 
							BUG();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						resp->id        = id;
 | 
				
			||||||
 | 
						resp->operation = op;
 | 
				
			||||||
 | 
						resp->status    = st;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	blk_rings->common.rsp_prod_pvt++;
 | 
						blk_rings->common.rsp_prod_pvt++;
 | 
				
			||||||
	RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&blk_rings->common, notify);
 | 
						RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&blk_rings->common, notify);
 | 
				
			||||||
	spin_unlock_irqrestore(&ring->blk_ring_lock, flags);
 | 
						spin_unlock_irqrestore(&ring->blk_ring_lock, flags);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -75,9 +75,8 @@ extern unsigned int xenblk_max_queues;
 | 
				
			||||||
struct blkif_common_request {
 | 
					struct blkif_common_request {
 | 
				
			||||||
	char dummy;
 | 
						char dummy;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
struct blkif_common_response {
 | 
					
 | 
				
			||||||
	char dummy;
 | 
					/* i386 protocol version */
 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct blkif_x86_32_request_rw {
 | 
					struct blkif_x86_32_request_rw {
 | 
				
			||||||
	uint8_t        nr_segments;  /* number of segments                   */
 | 
						uint8_t        nr_segments;  /* number of segments                   */
 | 
				
			||||||
| 
						 | 
					@ -129,14 +128,6 @@ struct blkif_x86_32_request {
 | 
				
			||||||
	} u;
 | 
						} u;
 | 
				
			||||||
} __attribute__((__packed__));
 | 
					} __attribute__((__packed__));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* i386 protocol version */
 | 
					 | 
				
			||||||
#pragma pack(push, 4)
 | 
					 | 
				
			||||||
struct blkif_x86_32_response {
 | 
					 | 
				
			||||||
	uint64_t        id;              /* copied from request */
 | 
					 | 
				
			||||||
	uint8_t         operation;       /* copied from request */
 | 
					 | 
				
			||||||
	int16_t         status;          /* BLKIF_RSP_???       */
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
#pragma pack(pop)
 | 
					 | 
				
			||||||
/* x86_64 protocol version */
 | 
					/* x86_64 protocol version */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct blkif_x86_64_request_rw {
 | 
					struct blkif_x86_64_request_rw {
 | 
				
			||||||
| 
						 | 
					@ -193,18 +184,12 @@ struct blkif_x86_64_request {
 | 
				
			||||||
	} u;
 | 
						} u;
 | 
				
			||||||
} __attribute__((__packed__));
 | 
					} __attribute__((__packed__));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct blkif_x86_64_response {
 | 
					 | 
				
			||||||
	uint64_t       __attribute__((__aligned__(8))) id;
 | 
					 | 
				
			||||||
	uint8_t         operation;       /* copied from request */
 | 
					 | 
				
			||||||
	int16_t         status;          /* BLKIF_RSP_???       */
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
DEFINE_RING_TYPES(blkif_common, struct blkif_common_request,
 | 
					DEFINE_RING_TYPES(blkif_common, struct blkif_common_request,
 | 
				
			||||||
		  struct blkif_common_response);
 | 
							  struct blkif_response);
 | 
				
			||||||
DEFINE_RING_TYPES(blkif_x86_32, struct blkif_x86_32_request,
 | 
					DEFINE_RING_TYPES(blkif_x86_32, struct blkif_x86_32_request,
 | 
				
			||||||
		  struct blkif_x86_32_response);
 | 
							  struct blkif_response __packed);
 | 
				
			||||||
DEFINE_RING_TYPES(blkif_x86_64, struct blkif_x86_64_request,
 | 
					DEFINE_RING_TYPES(blkif_x86_64, struct blkif_x86_64_request,
 | 
				
			||||||
		  struct blkif_x86_64_response);
 | 
							  struct blkif_response);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
union blkif_back_rings {
 | 
					union blkif_back_rings {
 | 
				
			||||||
	struct blkif_back_ring        native;
 | 
						struct blkif_back_ring        native;
 | 
				
			||||||
| 
						 | 
					@ -281,6 +266,7 @@ struct xen_blkif_ring {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wait_queue_head_t	wq;
 | 
						wait_queue_head_t	wq;
 | 
				
			||||||
	atomic_t		inflight;
 | 
						atomic_t		inflight;
 | 
				
			||||||
 | 
						bool			active;
 | 
				
			||||||
	/* One thread per blkif ring. */
 | 
						/* One thread per blkif ring. */
 | 
				
			||||||
	struct task_struct	*xenblkd;
 | 
						struct task_struct	*xenblkd;
 | 
				
			||||||
	unsigned int		waiting_reqs;
 | 
						unsigned int		waiting_reqs;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -159,7 +159,7 @@ static int xen_blkif_alloc_rings(struct xen_blkif *blkif)
 | 
				
			||||||
		init_waitqueue_head(&ring->shutdown_wq);
 | 
							init_waitqueue_head(&ring->shutdown_wq);
 | 
				
			||||||
		ring->blkif = blkif;
 | 
							ring->blkif = blkif;
 | 
				
			||||||
		ring->st_print = jiffies;
 | 
							ring->st_print = jiffies;
 | 
				
			||||||
		xen_blkif_get(blkif);
 | 
							ring->active = true;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
| 
						 | 
					@ -249,10 +249,12 @@ static int xen_blkif_disconnect(struct xen_blkif *blkif)
 | 
				
			||||||
		struct xen_blkif_ring *ring = &blkif->rings[r];
 | 
							struct xen_blkif_ring *ring = &blkif->rings[r];
 | 
				
			||||||
		unsigned int i = 0;
 | 
							unsigned int i = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (!ring->active)
 | 
				
			||||||
 | 
								continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (ring->xenblkd) {
 | 
							if (ring->xenblkd) {
 | 
				
			||||||
			kthread_stop(ring->xenblkd);
 | 
								kthread_stop(ring->xenblkd);
 | 
				
			||||||
			wake_up(&ring->shutdown_wq);
 | 
								wake_up(&ring->shutdown_wq);
 | 
				
			||||||
			ring->xenblkd = NULL;
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* The above kthread_stop() guarantees that at this point we
 | 
							/* The above kthread_stop() guarantees that at this point we
 | 
				
			||||||
| 
						 | 
					@ -296,7 +298,7 @@ static int xen_blkif_disconnect(struct xen_blkif *blkif)
 | 
				
			||||||
		BUG_ON(ring->free_pages_num != 0);
 | 
							BUG_ON(ring->free_pages_num != 0);
 | 
				
			||||||
		BUG_ON(ring->persistent_gnt_c != 0);
 | 
							BUG_ON(ring->persistent_gnt_c != 0);
 | 
				
			||||||
		WARN_ON(i != (XEN_BLKIF_REQS_PER_PAGE * blkif->nr_ring_pages));
 | 
							WARN_ON(i != (XEN_BLKIF_REQS_PER_PAGE * blkif->nr_ring_pages));
 | 
				
			||||||
		xen_blkif_put(blkif);
 | 
							ring->active = false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	blkif->nr_ring_pages = 0;
 | 
						blkif->nr_ring_pages = 0;
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
| 
						 | 
					@ -312,9 +314,10 @@ static int xen_blkif_disconnect(struct xen_blkif *blkif)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void xen_blkif_free(struct xen_blkif *blkif)
 | 
					static void xen_blkif_free(struct xen_blkif *blkif)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						WARN_ON(xen_blkif_disconnect(blkif));
 | 
				
			||||||
	xen_blkif_disconnect(blkif);
 | 
					 | 
				
			||||||
	xen_vbd_free(&blkif->vbd);
 | 
						xen_vbd_free(&blkif->vbd);
 | 
				
			||||||
 | 
						kfree(blkif->be->mode);
 | 
				
			||||||
 | 
						kfree(blkif->be);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Make sure everything is drained before shutting down */
 | 
						/* Make sure everything is drained before shutting down */
 | 
				
			||||||
	kmem_cache_free(xen_blkif_cachep, blkif);
 | 
						kmem_cache_free(xen_blkif_cachep, blkif);
 | 
				
			||||||
| 
						 | 
					@ -511,8 +514,6 @@ static int xen_blkbk_remove(struct xenbus_device *dev)
 | 
				
			||||||
		xen_blkif_put(be->blkif);
 | 
							xen_blkif_put(be->blkif);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kfree(be->mode);
 | 
					 | 
				
			||||||
	kfree(be);
 | 
					 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -343,7 +343,7 @@ static int mmap_mem(struct file *file, struct vm_area_struct *vma)
 | 
				
			||||||
	phys_addr_t offset = (phys_addr_t)vma->vm_pgoff << PAGE_SHIFT;
 | 
						phys_addr_t offset = (phys_addr_t)vma->vm_pgoff << PAGE_SHIFT;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* It's illegal to wrap around the end of the physical address space. */
 | 
						/* It's illegal to wrap around the end of the physical address space. */
 | 
				
			||||||
	if (offset + (phys_addr_t)size < offset)
 | 
						if (offset + (phys_addr_t)size - 1 < offset)
 | 
				
			||||||
		return -EINVAL;
 | 
							return -EINVAL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!valid_mmap_phys_addr_range(vma->vm_pgoff, size))
 | 
						if (!valid_mmap_phys_addr_range(vma->vm_pgoff, size))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,9 @@
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * random.c -- A strong random number generator
 | 
					 * random.c -- A strong random number generator
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (C) 2017 Jason A. Donenfeld <Jason@zx2c4.com>. All
 | 
				
			||||||
 | 
					 * Rights Reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 * Copyright Matt Mackall <mpm@selenic.com>, 2003, 2004, 2005
 | 
					 * Copyright Matt Mackall <mpm@selenic.com>, 2003, 2004, 2005
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Copyright Theodore Ts'o, 1994, 1995, 1996, 1997, 1998, 1999.  All
 | 
					 * Copyright Theodore Ts'o, 1994, 1995, 1996, 1997, 1998, 1999.  All
 | 
				
			||||||
| 
						 | 
					@ -762,6 +765,8 @@ static DECLARE_WAIT_QUEUE_HEAD(crng_init_wait);
 | 
				
			||||||
static struct crng_state **crng_node_pool __read_mostly;
 | 
					static struct crng_state **crng_node_pool __read_mostly;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void invalidate_batched_entropy(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void crng_initialize(struct crng_state *crng)
 | 
					static void crng_initialize(struct crng_state *crng)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int		i;
 | 
						int		i;
 | 
				
			||||||
| 
						 | 
					@ -799,6 +804,7 @@ static int crng_fast_load(const char *cp, size_t len)
 | 
				
			||||||
		cp++; crng_init_cnt++; len--;
 | 
							cp++; crng_init_cnt++; len--;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (crng_init_cnt >= CRNG_INIT_CNT_THRESH) {
 | 
						if (crng_init_cnt >= CRNG_INIT_CNT_THRESH) {
 | 
				
			||||||
 | 
							invalidate_batched_entropy();
 | 
				
			||||||
		crng_init = 1;
 | 
							crng_init = 1;
 | 
				
			||||||
		wake_up_interruptible(&crng_init_wait);
 | 
							wake_up_interruptible(&crng_init_wait);
 | 
				
			||||||
		pr_notice("random: fast init done\n");
 | 
							pr_notice("random: fast init done\n");
 | 
				
			||||||
| 
						 | 
					@ -836,6 +842,7 @@ static void crng_reseed(struct crng_state *crng, struct entropy_store *r)
 | 
				
			||||||
	memzero_explicit(&buf, sizeof(buf));
 | 
						memzero_explicit(&buf, sizeof(buf));
 | 
				
			||||||
	crng->init_time = jiffies;
 | 
						crng->init_time = jiffies;
 | 
				
			||||||
	if (crng == &primary_crng && crng_init < 2) {
 | 
						if (crng == &primary_crng && crng_init < 2) {
 | 
				
			||||||
 | 
							invalidate_batched_entropy();
 | 
				
			||||||
		crng_init = 2;
 | 
							crng_init = 2;
 | 
				
			||||||
		process_random_ready_list();
 | 
							process_random_ready_list();
 | 
				
			||||||
		wake_up_interruptible(&crng_init_wait);
 | 
							wake_up_interruptible(&crng_init_wait);
 | 
				
			||||||
| 
						 | 
					@ -1097,15 +1104,15 @@ static void add_interrupt_bench(cycles_t start)
 | 
				
			||||||
static __u32 get_reg(struct fast_pool *f, struct pt_regs *regs)
 | 
					static __u32 get_reg(struct fast_pool *f, struct pt_regs *regs)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	__u32 *ptr = (__u32 *) regs;
 | 
						__u32 *ptr = (__u32 *) regs;
 | 
				
			||||||
	unsigned long flags;
 | 
						unsigned int idx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (regs == NULL)
 | 
						if (regs == NULL)
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
	local_irq_save(flags);
 | 
						idx = READ_ONCE(f->reg_idx);
 | 
				
			||||||
	if (f->reg_idx >= sizeof(struct pt_regs) / sizeof(__u32))
 | 
						if (idx >= sizeof(struct pt_regs) / sizeof(__u32))
 | 
				
			||||||
		f->reg_idx = 0;
 | 
							idx = 0;
 | 
				
			||||||
	ptr += f->reg_idx++;
 | 
						ptr += idx++;
 | 
				
			||||||
	local_irq_restore(flags);
 | 
						WRITE_ONCE(f->reg_idx, idx);
 | 
				
			||||||
	return *ptr;
 | 
						return *ptr;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2023,6 +2030,7 @@ struct batched_entropy {
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
	unsigned int position;
 | 
						unsigned int position;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					static rwlock_t batched_entropy_reset_lock = __RW_LOCK_UNLOCKED(batched_entropy_reset_lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Get a random word for internal kernel use only. The quality of the random
 | 
					 * Get a random word for internal kernel use only. The quality of the random
 | 
				
			||||||
| 
						 | 
					@ -2033,6 +2041,8 @@ static DEFINE_PER_CPU(struct batched_entropy, batched_entropy_u64);
 | 
				
			||||||
u64 get_random_u64(void)
 | 
					u64 get_random_u64(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	u64 ret;
 | 
						u64 ret;
 | 
				
			||||||
 | 
						bool use_lock = crng_init < 2;
 | 
				
			||||||
 | 
						unsigned long flags;
 | 
				
			||||||
	struct batched_entropy *batch;
 | 
						struct batched_entropy *batch;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if BITS_PER_LONG == 64
 | 
					#if BITS_PER_LONG == 64
 | 
				
			||||||
| 
						 | 
					@ -2045,11 +2055,15 @@ u64 get_random_u64(void)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	batch = &get_cpu_var(batched_entropy_u64);
 | 
						batch = &get_cpu_var(batched_entropy_u64);
 | 
				
			||||||
 | 
						if (use_lock)
 | 
				
			||||||
 | 
							read_lock_irqsave(&batched_entropy_reset_lock, flags);
 | 
				
			||||||
	if (batch->position % ARRAY_SIZE(batch->entropy_u64) == 0) {
 | 
						if (batch->position % ARRAY_SIZE(batch->entropy_u64) == 0) {
 | 
				
			||||||
		extract_crng((u8 *)batch->entropy_u64);
 | 
							extract_crng((u8 *)batch->entropy_u64);
 | 
				
			||||||
		batch->position = 0;
 | 
							batch->position = 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	ret = batch->entropy_u64[batch->position++];
 | 
						ret = batch->entropy_u64[batch->position++];
 | 
				
			||||||
 | 
						if (use_lock)
 | 
				
			||||||
 | 
							read_unlock_irqrestore(&batched_entropy_reset_lock, flags);
 | 
				
			||||||
	put_cpu_var(batched_entropy_u64);
 | 
						put_cpu_var(batched_entropy_u64);
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -2059,22 +2073,45 @@ static DEFINE_PER_CPU(struct batched_entropy, batched_entropy_u32);
 | 
				
			||||||
u32 get_random_u32(void)
 | 
					u32 get_random_u32(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	u32 ret;
 | 
						u32 ret;
 | 
				
			||||||
 | 
						bool use_lock = crng_init < 2;
 | 
				
			||||||
 | 
						unsigned long flags;
 | 
				
			||||||
	struct batched_entropy *batch;
 | 
						struct batched_entropy *batch;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (arch_get_random_int(&ret))
 | 
						if (arch_get_random_int(&ret))
 | 
				
			||||||
		return ret;
 | 
							return ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	batch = &get_cpu_var(batched_entropy_u32);
 | 
						batch = &get_cpu_var(batched_entropy_u32);
 | 
				
			||||||
 | 
						if (use_lock)
 | 
				
			||||||
 | 
							read_lock_irqsave(&batched_entropy_reset_lock, flags);
 | 
				
			||||||
	if (batch->position % ARRAY_SIZE(batch->entropy_u32) == 0) {
 | 
						if (batch->position % ARRAY_SIZE(batch->entropy_u32) == 0) {
 | 
				
			||||||
		extract_crng((u8 *)batch->entropy_u32);
 | 
							extract_crng((u8 *)batch->entropy_u32);
 | 
				
			||||||
		batch->position = 0;
 | 
							batch->position = 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	ret = batch->entropy_u32[batch->position++];
 | 
						ret = batch->entropy_u32[batch->position++];
 | 
				
			||||||
 | 
						if (use_lock)
 | 
				
			||||||
 | 
							read_unlock_irqrestore(&batched_entropy_reset_lock, flags);
 | 
				
			||||||
	put_cpu_var(batched_entropy_u32);
 | 
						put_cpu_var(batched_entropy_u32);
 | 
				
			||||||
	return ret;
 | 
						return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
EXPORT_SYMBOL(get_random_u32);
 | 
					EXPORT_SYMBOL(get_random_u32);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* It's important to invalidate all potential batched entropy that might
 | 
				
			||||||
 | 
					 * be stored before the crng is initialized, which we can do lazily by
 | 
				
			||||||
 | 
					 * simply resetting the counter to zero so that it's re-extracted on the
 | 
				
			||||||
 | 
					 * next usage. */
 | 
				
			||||||
 | 
					static void invalidate_batched_entropy(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int cpu;
 | 
				
			||||||
 | 
						unsigned long flags;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						write_lock_irqsave(&batched_entropy_reset_lock, flags);
 | 
				
			||||||
 | 
						for_each_possible_cpu (cpu) {
 | 
				
			||||||
 | 
							per_cpu_ptr(&batched_entropy_u32, cpu)->position = 0;
 | 
				
			||||||
 | 
							per_cpu_ptr(&batched_entropy_u64, cpu)->position = 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						write_unlock_irqrestore(&batched_entropy_reset_lock, flags);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * randomize_page - Generate a random, page aligned address
 | 
					 * randomize_page - Generate a random, page aligned address
 | 
				
			||||||
 * @start:	The smallest acceptable address the caller will take.
 | 
					 * @start:	The smallest acceptable address the caller will take.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,6 +14,7 @@ config COMMON_CLK_MESON8B
 | 
				
			||||||
config COMMON_CLK_GXBB
 | 
					config COMMON_CLK_GXBB
 | 
				
			||||||
	bool
 | 
						bool
 | 
				
			||||||
	depends on COMMON_CLK_AMLOGIC
 | 
						depends on COMMON_CLK_AMLOGIC
 | 
				
			||||||
 | 
						select RESET_CONTROLLER
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
	  Support for the clock controller on AmLogic S905 devices, aka gxbb.
 | 
						  Support for the clock controller on AmLogic S905 devices, aka gxbb.
 | 
				
			||||||
	  Say Y if you want peripherals and CPU frequency scaling to work.
 | 
						  Say Y if you want peripherals and CPU frequency scaling to work.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -156,6 +156,7 @@ config SUN8I_R_CCU
 | 
				
			||||||
	bool "Support for Allwinner SoCs' PRCM CCUs"
 | 
						bool "Support for Allwinner SoCs' PRCM CCUs"
 | 
				
			||||||
	select SUNXI_CCU_DIV
 | 
						select SUNXI_CCU_DIV
 | 
				
			||||||
	select SUNXI_CCU_GATE
 | 
						select SUNXI_CCU_GATE
 | 
				
			||||||
 | 
						select SUNXI_CCU_MP
 | 
				
			||||||
	default MACH_SUN8I || (ARCH_SUNXI && ARM64)
 | 
						default MACH_SUN8I || (ARCH_SUNXI && ARM64)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,7 +31,9 @@
 | 
				
			||||||
#define CLK_PLL_VIDEO0_2X		8
 | 
					#define CLK_PLL_VIDEO0_2X		8
 | 
				
			||||||
#define CLK_PLL_VE			9
 | 
					#define CLK_PLL_VE			9
 | 
				
			||||||
#define CLK_PLL_DDR0			10
 | 
					#define CLK_PLL_DDR0			10
 | 
				
			||||||
#define CLK_PLL_PERIPH0			11
 | 
					
 | 
				
			||||||
 | 
					/* PLL_PERIPH0 exported for PRCM */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CLK_PLL_PERIPH0_2X		12
 | 
					#define CLK_PLL_PERIPH0_2X		12
 | 
				
			||||||
#define CLK_PLL_PERIPH1			13
 | 
					#define CLK_PLL_PERIPH1			13
 | 
				
			||||||
#define CLK_PLL_PERIPH1_2X		14
 | 
					#define CLK_PLL_PERIPH1_2X		14
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -243,7 +243,7 @@ static SUNXI_CCU_GATE(ahb_ss_clk,	"ahb-ss",	"ahb",
 | 
				
			||||||
static SUNXI_CCU_GATE(ahb_dma_clk,	"ahb-dma",	"ahb",
 | 
					static SUNXI_CCU_GATE(ahb_dma_clk,	"ahb-dma",	"ahb",
 | 
				
			||||||
		      0x060, BIT(6), 0);
 | 
							      0x060, BIT(6), 0);
 | 
				
			||||||
static SUNXI_CCU_GATE(ahb_bist_clk,	"ahb-bist",	"ahb",
 | 
					static SUNXI_CCU_GATE(ahb_bist_clk,	"ahb-bist",	"ahb",
 | 
				
			||||||
		      0x060, BIT(6), 0);
 | 
							      0x060, BIT(7), 0);
 | 
				
			||||||
static SUNXI_CCU_GATE(ahb_mmc0_clk,	"ahb-mmc0",	"ahb",
 | 
					static SUNXI_CCU_GATE(ahb_mmc0_clk,	"ahb-mmc0",	"ahb",
 | 
				
			||||||
		      0x060, BIT(8), 0);
 | 
							      0x060, BIT(8), 0);
 | 
				
			||||||
static SUNXI_CCU_GATE(ahb_mmc1_clk,	"ahb-mmc1",	"ahb",
 | 
					static SUNXI_CCU_GATE(ahb_mmc1_clk,	"ahb-mmc1",	"ahb",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -556,7 +556,7 @@ static SUNXI_CCU_M_WITH_MUX_GATE(lcd0_ch1_clk, "lcd0-ch1", lcd_ch1_parents,
 | 
				
			||||||
				 0x12c, 0, 4, 24, 3, BIT(31),
 | 
									 0x12c, 0, 4, 24, 3, BIT(31),
 | 
				
			||||||
				 CLK_SET_RATE_PARENT);
 | 
									 CLK_SET_RATE_PARENT);
 | 
				
			||||||
static SUNXI_CCU_M_WITH_MUX_GATE(lcd1_ch1_clk, "lcd1-ch1", lcd_ch1_parents,
 | 
					static SUNXI_CCU_M_WITH_MUX_GATE(lcd1_ch1_clk, "lcd1-ch1", lcd_ch1_parents,
 | 
				
			||||||
				 0x12c, 0, 4, 24, 3, BIT(31),
 | 
									 0x130, 0, 4, 24, 3, BIT(31),
 | 
				
			||||||
				 CLK_SET_RATE_PARENT);
 | 
									 CLK_SET_RATE_PARENT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const char * const csi_sclk_parents[] = { "pll-video0", "pll-video1",
 | 
					static const char * const csi_sclk_parents[] = { "pll-video0", "pll-video1",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,7 +29,9 @@
 | 
				
			||||||
#define CLK_PLL_VIDEO		6
 | 
					#define CLK_PLL_VIDEO		6
 | 
				
			||||||
#define CLK_PLL_VE		7
 | 
					#define CLK_PLL_VE		7
 | 
				
			||||||
#define CLK_PLL_DDR		8
 | 
					#define CLK_PLL_DDR		8
 | 
				
			||||||
#define CLK_PLL_PERIPH0		9
 | 
					
 | 
				
			||||||
 | 
					/* PLL_PERIPH0 exported for PRCM */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CLK_PLL_PERIPH0_2X	10
 | 
					#define CLK_PLL_PERIPH0_2X	10
 | 
				
			||||||
#define CLK_PLL_GPU		11
 | 
					#define CLK_PLL_GPU		11
 | 
				
			||||||
#define CLK_PLL_PERIPH1		12
 | 
					#define CLK_PLL_PERIPH1		12
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -537,7 +537,7 @@ static struct ccu_reset_map sun8i_v3s_ccu_resets[] = {
 | 
				
			||||||
	[RST_BUS_EMAC]		=  { 0x2c0, BIT(17) },
 | 
						[RST_BUS_EMAC]		=  { 0x2c0, BIT(17) },
 | 
				
			||||||
	[RST_BUS_HSTIMER]	=  { 0x2c0, BIT(19) },
 | 
						[RST_BUS_HSTIMER]	=  { 0x2c0, BIT(19) },
 | 
				
			||||||
	[RST_BUS_SPI0]		=  { 0x2c0, BIT(20) },
 | 
						[RST_BUS_SPI0]		=  { 0x2c0, BIT(20) },
 | 
				
			||||||
	[RST_BUS_OTG]		=  { 0x2c0, BIT(23) },
 | 
						[RST_BUS_OTG]		=  { 0x2c0, BIT(24) },
 | 
				
			||||||
	[RST_BUS_EHCI0]		=  { 0x2c0, BIT(26) },
 | 
						[RST_BUS_EHCI0]		=  { 0x2c0, BIT(26) },
 | 
				
			||||||
	[RST_BUS_OHCI0]		=  { 0x2c0, BIT(29) },
 | 
						[RST_BUS_OHCI0]		=  { 0x2c0, BIT(29) },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -185,8 +185,8 @@ static ssize_t store_down_threshold(struct gov_attr_set *attr_set,
 | 
				
			||||||
	int ret;
 | 
						int ret;
 | 
				
			||||||
	ret = sscanf(buf, "%u", &input);
 | 
						ret = sscanf(buf, "%u", &input);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* cannot be lower than 11 otherwise freq will not fall */
 | 
						/* cannot be lower than 1 otherwise freq will not fall */
 | 
				
			||||||
	if (ret != 1 || input < 11 || input > 100 ||
 | 
						if (ret != 1 || input < 1 || input > 100 ||
 | 
				
			||||||
			input >= dbs_data->up_threshold)
 | 
								input >= dbs_data->up_threshold)
 | 
				
			||||||
		return -EINVAL;
 | 
							return -EINVAL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
		Reference in a new issue