Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge 5.16-rc6 into usb-next

We need the USB fixes in here as well.

Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

+1727 -642
+4 -4
Documentation/devicetree/bindings/i2c/apple,i2c.yaml
··· 20 20 21 21 properties: 22 22 compatible: 23 - enum: 24 - - apple,t8103-i2c 25 - - apple,i2c 23 + items: 24 + - const: apple,t8103-i2c 25 + - const: apple,i2c 26 26 27 27 reg: 28 28 maxItems: 1 ··· 51 51 examples: 52 52 - | 53 53 i2c@35010000 { 54 - compatible = "apple,t8103-i2c"; 54 + compatible = "apple,t8103-i2c", "apple,i2c"; 55 55 reg = <0x35010000 0x4000>; 56 56 interrupt-parent = <&aic>; 57 57 interrupts = <0 627 4>;
+16
Documentation/networking/device_drivers/ethernet/intel/ixgbe.rst
··· 440 440 a virtual function (VF), jumbo frames must first be enabled in the physical 441 441 function (PF). The VF MTU setting cannot be larger than the PF MTU. 442 442 443 + NBASE-T Support 444 + --------------- 445 + The ixgbe driver supports NBASE-T on some devices. However, the advertisement 446 + of NBASE-T speeds is suppressed by default, to accommodate broken network 447 + switches which cannot cope with advertised NBASE-T speeds. Use the ethtool 448 + command to enable advertising NBASE-T speeds on devices which support it:: 449 + 450 + ethtool -s eth? advertise 0x1800000001028 451 + 452 + On Linux systems with INTERFACES(5), this can be specified as a pre-up command 453 + in /etc/network/interfaces so that the interface is always brought up with 454 + NBASE-T support, e.g.:: 455 + 456 + iface eth? inet dhcp 457 + pre-up ethtool -s eth? advertise 0x1800000001028 || true 458 + 443 459 Generic Receive Offload, aka GRO 444 460 -------------------------------- 445 461 The driver supports the in-kernel software implementation of GRO. GRO has
+7 -7
MAINTAINERS
··· 3066 3066 F: drivers/phy/qualcomm/phy-ath79-usb.c 3067 3067 3068 3068 ATHEROS ATH GENERIC UTILITIES 3069 - M: Kalle Valo <kvalo@codeaurora.org> 3069 + M: Kalle Valo <kvalo@kernel.org> 3070 3070 L: linux-wireless@vger.kernel.org 3071 3071 S: Supported 3072 3072 F: drivers/net/wireless/ath/* ··· 3081 3081 F: drivers/net/wireless/ath/ath5k/ 3082 3082 3083 3083 ATHEROS ATH6KL WIRELESS DRIVER 3084 - M: Kalle Valo <kvalo@codeaurora.org> 3084 + M: Kalle Valo <kvalo@kernel.org> 3085 3085 L: linux-wireless@vger.kernel.org 3086 3086 S: Supported 3087 3087 W: https://wireless.wiki.kernel.org/en/users/Drivers/ath6kl ··· 13248 13248 F: include/uapi/linux/netdevice.h 13249 13249 13250 13250 NETWORKING DRIVERS (WIRELESS) 13251 - M: Kalle Valo <kvalo@codeaurora.org> 13251 + M: Kalle Valo <kvalo@kernel.org> 13252 13252 L: linux-wireless@vger.kernel.org 13253 13253 S: Maintained 13254 13254 Q: http://patchwork.kernel.org/project/linux-wireless/list/ ··· 15704 15704 F: drivers/media/tuners/qt1010* 15705 15705 15706 15706 QUALCOMM ATHEROS ATH10K WIRELESS DRIVER 15707 - M: Kalle Valo <kvalo@codeaurora.org> 15707 + M: Kalle Valo <kvalo@kernel.org> 15708 15708 L: ath10k@lists.infradead.org 15709 15709 S: Supported 15710 15710 W: https://wireless.wiki.kernel.org/en/users/Drivers/ath10k ··· 15712 15712 F: drivers/net/wireless/ath/ath10k/ 15713 15713 15714 15714 QUALCOMM ATHEROS ATH11K WIRELESS DRIVER 15715 - M: Kalle Valo <kvalo@codeaurora.org> 15715 + M: Kalle Valo <kvalo@kernel.org> 15716 15716 L: ath11k@lists.infradead.org 15717 15717 S: Supported 15718 15718 T: git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git ··· 15885 15885 F: drivers/media/platform/qcom/venus/ 15886 15886 15887 15887 QUALCOMM WCN36XX WIRELESS DRIVER 15888 - M: Kalle Valo <kvalo@codeaurora.org> 15888 + M: Kalle Valo <kvalo@kernel.org> 15889 15889 L: wcn36xx@lists.infradead.org 15890 15890 S: Supported 15891 15891 W: https://wireless.wiki.kernel.org/en/users/Drivers/wcn36xx ··· 21067 21067 F: arch/x86/kernel/cpu/zhaoxin.c 21068 21068 21069 21069 ZONEFS FILESYSTEM 21070 - M: Damien Le Moal <damien.lemoal@wdc.com> 21070 + M: Damien Le Moal <damien.lemoal@opensource.wdc.com> 21071 21071 M: Naohiro Aota <naohiro.aota@wdc.com> 21072 21072 R: Johannes Thumshirn <jth@kernel.org> 21073 21073 L: linux-fsdevel@vger.kernel.org
+1 -1
Makefile
··· 2 2 VERSION = 5 3 3 PATCHLEVEL = 16 4 4 SUBLEVEL = 0 5 - EXTRAVERSION = -rc5 5 + EXTRAVERSION = -rc6 6 6 NAME = Gobble Gobble 7 7 8 8 # *DOCUMENTATION*
+2
arch/arm/boot/dts/imx6qp-prtwd3.dts
··· 178 178 label = "cpu"; 179 179 ethernet = <&fec>; 180 180 phy-mode = "rgmii-id"; 181 + rx-internal-delay-ps = <2000>; 182 + tx-internal-delay-ps = <2000>; 181 183 182 184 fixed-link { 183 185 speed = <100>;
+1 -1
arch/arm/boot/dts/imx6ull-pinfunc.h
··· 82 82 #define MX6ULL_PAD_CSI_DATA04__ESAI_TX_FS 0x01F4 0x0480 0x0000 0x9 0x0 83 83 #define MX6ULL_PAD_CSI_DATA05__ESAI_TX_CLK 0x01F8 0x0484 0x0000 0x9 0x0 84 84 #define MX6ULL_PAD_CSI_DATA06__ESAI_TX5_RX0 0x01FC 0x0488 0x0000 0x9 0x0 85 - #define MX6ULL_PAD_CSI_DATA07__ESAI_T0 0x0200 0x048C 0x0000 0x9 0x0 85 + #define MX6ULL_PAD_CSI_DATA07__ESAI_TX0 0x0200 0x048C 0x0000 0x9 0x0 86 86 87 87 #endif /* __DTS_IMX6ULL_PINFUNC_H */
+2
arch/arm/boot/dts/ls1021a-tsn.dts
··· 91 91 /* Internal port connected to eth2 */ 92 92 ethernet = <&enet2>; 93 93 phy-mode = "rgmii"; 94 + rx-internal-delay-ps = <0>; 95 + tx-internal-delay-ps = <0>; 94 96 reg = <4>; 95 97 96 98 fixed-link {
+1 -1
arch/arm/boot/dts/socfpga_arria10_socdk_qspi.dts
··· 12 12 flash0: n25q00@0 { 13 13 #address-cells = <1>; 14 14 #size-cells = <1>; 15 - compatible = "n25q00aa"; 15 + compatible = "micron,mt25qu02g", "jedec,spi-nor"; 16 16 reg = <0>; 17 17 spi-max-frequency = <100000000>; 18 18
+1 -1
arch/arm/boot/dts/socfpga_arria5_socdk.dts
··· 119 119 flash: flash@0 { 120 120 #address-cells = <1>; 121 121 #size-cells = <1>; 122 - compatible = "n25q256a"; 122 + compatible = "micron,n25q256a", "jedec,spi-nor"; 123 123 reg = <0>; 124 124 spi-max-frequency = <100000000>; 125 125
+1 -1
arch/arm/boot/dts/socfpga_cyclone5_socdk.dts
··· 124 124 flash0: n25q00@0 { 125 125 #address-cells = <1>; 126 126 #size-cells = <1>; 127 - compatible = "n25q00"; 127 + compatible = "micron,mt25qu02g", "jedec,spi-nor"; 128 128 reg = <0>; /* chip select */ 129 129 spi-max-frequency = <100000000>; 130 130
+1 -1
arch/arm/boot/dts/socfpga_cyclone5_sockit.dts
··· 169 169 flash: flash@0 { 170 170 #address-cells = <1>; 171 171 #size-cells = <1>; 172 - compatible = "n25q00"; 172 + compatible = "micron,mt25qu02g", "jedec,spi-nor"; 173 173 reg = <0>; 174 174 spi-max-frequency = <100000000>; 175 175
+1 -1
arch/arm/boot/dts/socfpga_cyclone5_socrates.dts
··· 80 80 flash: flash@0 { 81 81 #address-cells = <1>; 82 82 #size-cells = <1>; 83 - compatible = "n25q256a"; 83 + compatible = "micron,n25q256a", "jedec,spi-nor"; 84 84 reg = <0>; 85 85 spi-max-frequency = <100000000>; 86 86 m25p,fast-read;
+1 -1
arch/arm/boot/dts/socfpga_cyclone5_sodia.dts
··· 116 116 flash0: n25q512a@0 { 117 117 #address-cells = <1>; 118 118 #size-cells = <1>; 119 - compatible = "n25q512a"; 119 + compatible = "micron,n25q512a", "jedec,spi-nor"; 120 120 reg = <0>; 121 121 spi-max-frequency = <100000000>; 122 122
+2 -2
arch/arm/boot/dts/socfpga_cyclone5_vining_fpga.dts
··· 224 224 n25q128@0 { 225 225 #address-cells = <1>; 226 226 #size-cells = <1>; 227 - compatible = "n25q128"; 227 + compatible = "micron,n25q128", "jedec,spi-nor"; 228 228 reg = <0>; /* chip select */ 229 229 spi-max-frequency = <100000000>; 230 230 m25p,fast-read; ··· 241 241 n25q00@1 { 242 242 #address-cells = <1>; 243 243 #size-cells = <1>; 244 - compatible = "n25q00"; 244 + compatible = "micron,mt25qu02g", "jedec,spi-nor"; 245 245 reg = <1>; /* chip select */ 246 246 spi-max-frequency = <100000000>; 247 247 m25p,fast-read;
+1 -1
arch/arm/mach-rockchip/platsmp.c
··· 189 189 rockchip_boot_fn = __pa_symbol(secondary_startup); 190 190 191 191 /* copy the trampoline to sram, that runs during startup of the core */ 192 - memcpy(sram_base_addr, &rockchip_secondary_trampoline, trampoline_sz); 192 + memcpy_toio(sram_base_addr, &rockchip_secondary_trampoline, trampoline_sz); 193 193 flush_cache_all(); 194 194 outer_clean_range(0, trampoline_sz); 195 195
-1
arch/arm64/Kconfig.platforms
··· 161 161 162 162 config ARCH_MESON 163 163 bool "Amlogic Platforms" 164 - select COMMON_CLK 165 164 help 166 165 This enables support for the arm64 based Amlogic SoCs 167 166 such as the s905, S905X/D, S912, A113X/D or S905X/D2
+15 -15
arch/arm64/boot/dts/amlogic/meson-axg-jethome-jethub-j100.dts
··· 134 134 type = "critical"; 135 135 }; 136 136 }; 137 - }; 138 137 139 - cpu_cooling_maps: cooling-maps { 140 - map0 { 141 - trip = <&cpu_passive>; 142 - cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, 143 - <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, 144 - <&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, 145 - <&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>; 146 - }; 138 + cpu_cooling_maps: cooling-maps { 139 + map0 { 140 + trip = <&cpu_passive>; 141 + cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, 142 + <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, 143 + <&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, 144 + <&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>; 145 + }; 147 146 148 - map1 { 149 - trip = <&cpu_hot>; 150 - cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, 151 - <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, 152 - <&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, 153 - <&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>; 147 + map1 { 148 + trip = <&cpu_hot>; 149 + cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, 150 + <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, 151 + <&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, 152 + <&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>; 153 + }; 154 154 }; 155 155 }; 156 156 };
+1 -1
arch/arm64/boot/dts/apple/t8103-j274.dts
··· 60 60 61 61 &port02 { 62 62 bus-range = <3 3>; 63 - ethernet0: pci@0,0 { 63 + ethernet0: ethernet@0,0 { 64 64 reg = <0x30000 0x0 0x0 0x0 0x0>; 65 65 /* To be filled by the loader */ 66 66 local-mac-address = [00 10 18 00 00 00];
+4
arch/arm64/boot/dts/apple/t8103.dtsi
··· 144 144 apple,npins = <212>; 145 145 146 146 interrupt-controller; 147 + #interrupt-cells = <2>; 147 148 interrupt-parent = <&aic>; 148 149 interrupts = <AIC_IRQ 190 IRQ_TYPE_LEVEL_HIGH>, 149 150 <AIC_IRQ 191 IRQ_TYPE_LEVEL_HIGH>, ··· 171 170 apple,npins = <42>; 172 171 173 172 interrupt-controller; 173 + #interrupt-cells = <2>; 174 174 interrupt-parent = <&aic>; 175 175 interrupts = <AIC_IRQ 268 IRQ_TYPE_LEVEL_HIGH>, 176 176 <AIC_IRQ 269 IRQ_TYPE_LEVEL_HIGH>, ··· 192 190 apple,npins = <23>; 193 191 194 192 interrupt-controller; 193 + #interrupt-cells = <2>; 195 194 interrupt-parent = <&aic>; 196 195 interrupts = <AIC_IRQ 330 IRQ_TYPE_LEVEL_HIGH>, 197 196 <AIC_IRQ 331 IRQ_TYPE_LEVEL_HIGH>, ··· 213 210 apple,npins = <16>; 214 211 215 212 interrupt-controller; 213 + #interrupt-cells = <2>; 216 214 interrupt-parent = <&aic>; 217 215 interrupts = <AIC_IRQ 391 IRQ_TYPE_LEVEL_HIGH>, 218 216 <AIC_IRQ 392 IRQ_TYPE_LEVEL_HIGH>,
-2
arch/arm64/boot/dts/freescale/fsl-ls1088a-ten64.dts
··· 38 38 powerdn { 39 39 label = "External Power Down"; 40 40 gpios = <&gpio1 17 GPIO_ACTIVE_LOW>; 41 - interrupts = <&gpio1 17 IRQ_TYPE_EDGE_FALLING>; 42 41 linux,code = <KEY_POWER>; 43 42 }; 44 43 ··· 45 46 admin { 46 47 label = "ADMIN button"; 47 48 gpios = <&gpio3 8 GPIO_ACTIVE_HIGH>; 48 - interrupts = <&gpio3 8 IRQ_TYPE_EDGE_RISING>; 49 49 linux,code = <KEY_WPS_BUTTON>; 50 50 }; 51 51 };
+4
arch/arm64/boot/dts/freescale/fsl-lx2160a-bluebox3.dts
··· 386 386 reg = <2>; 387 387 ethernet = <&dpmac17>; 388 388 phy-mode = "rgmii-id"; 389 + rx-internal-delay-ps = <2000>; 390 + tx-internal-delay-ps = <2000>; 389 391 390 392 fixed-link { 391 393 speed = <1000>; ··· 531 529 reg = <2>; 532 530 ethernet = <&dpmac18>; 533 531 phy-mode = "rgmii-id"; 532 + rx-internal-delay-ps = <2000>; 533 + tx-internal-delay-ps = <2000>; 534 534 535 535 fixed-link { 536 536 speed = <1000>;
-2
arch/arm64/boot/dts/freescale/imx8mq.dtsi
··· 524 524 <&clk IMX8MQ_VIDEO_PLL1>, 525 525 <&clk IMX8MQ_VIDEO_PLL1_OUT>; 526 526 assigned-clock-rates = <0>, <0>, <0>, <594000000>; 527 - interconnects = <&noc IMX8MQ_ICM_LCDIF &noc IMX8MQ_ICS_DRAM>; 528 - interconnect-names = "dram"; 529 527 status = "disabled"; 530 528 531 529 port@0 {
+1 -1
arch/arm64/boot/dts/rockchip/rk3308-roc-cc.dts
··· 97 97 regulator-max-microvolt = <3300000>; 98 98 regulator-always-on; 99 99 regulator-boot-on; 100 - vim-supply = <&vcc_io>; 100 + vin-supply = <&vcc_io>; 101 101 }; 102 102 103 103 vdd_core: vdd-core {
-1
arch/arm64/boot/dts/rockchip/rk3399-khadas-edge.dtsi
··· 705 705 &sdhci { 706 706 bus-width = <8>; 707 707 mmc-hs400-1_8v; 708 - mmc-hs400-enhanced-strobe; 709 708 non-removable; 710 709 status = "okay"; 711 710 };
+1
arch/arm64/boot/dts/rockchip/rk3399-kobol-helios64.dts
··· 276 276 clock-output-names = "xin32k", "rk808-clkout2"; 277 277 pinctrl-names = "default"; 278 278 pinctrl-0 = <&pmic_int_l>; 279 + rockchip,system-power-controller; 279 280 vcc1-supply = <&vcc5v0_sys>; 280 281 vcc2-supply = <&vcc5v0_sys>; 281 282 vcc3-supply = <&vcc5v0_sys>;
+1 -1
arch/arm64/boot/dts/rockchip/rk3399-leez-p710.dts
··· 55 55 regulator-boot-on; 56 56 regulator-min-microvolt = <3300000>; 57 57 regulator-max-microvolt = <3300000>; 58 - vim-supply = <&vcc3v3_sys>; 58 + vin-supply = <&vcc3v3_sys>; 59 59 }; 60 60 61 61 vcc3v3_sys: vcc3v3-sys {
+1 -1
arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi
··· 502 502 status = "okay"; 503 503 504 504 bt656-supply = <&vcc_3v0>; 505 - audio-supply = <&vcc_3v0>; 505 + audio-supply = <&vcc1v8_codec>; 506 506 sdmmc-supply = <&vcc_sdio>; 507 507 gpio1830-supply = <&vcc_3v0>; 508 508 };
+1
arch/arm64/kernel/machine_kexec_file.c
··· 149 149 initrd_len, cmdline, 0); 150 150 if (!dtb) { 151 151 pr_err("Preparing for new dtb failed\n"); 152 + ret = -EINVAL; 152 153 goto out_err; 153 154 } 154 155
+2
arch/mips/include/asm/mach-ralink/spaces.h
··· 6 6 #define PCI_IOSIZE SZ_64K 7 7 #define IO_SPACE_LIMIT (PCI_IOSIZE - 1) 8 8 9 + #define pci_remap_iospace pci_remap_iospace 10 + 9 11 #include <asm/mach-generic/spaces.h> 10 12 #endif
-4
arch/mips/include/asm/pci.h
··· 20 20 #include <linux/list.h> 21 21 #include <linux/of.h> 22 22 23 - #ifdef CONFIG_PCI_DRIVERS_GENERIC 24 - #define pci_remap_iospace pci_remap_iospace 25 - #endif 26 - 27 23 #ifdef CONFIG_PCI_DRIVERS_LEGACY 28 24 29 25 /*
+2
arch/mips/pci/pci-generic.c
··· 47 47 pci_read_bridge_bases(bus); 48 48 } 49 49 50 + #ifdef pci_remap_iospace 50 51 int pci_remap_iospace(const struct resource *res, phys_addr_t phys_addr) 51 52 { 52 53 unsigned long vaddr; ··· 61 60 set_io_port_base(vaddr); 62 61 return 0; 63 62 } 63 + #endif
+34 -8
arch/powerpc/kernel/module_64.c
··· 422 422 const char *name) 423 423 { 424 424 long reladdr; 425 + func_desc_t desc; 426 + int i; 425 427 426 428 if (is_mprofile_ftrace_call(name)) 427 429 return create_ftrace_stub(entry, addr, me); 428 430 429 - memcpy(entry->jump, ppc64_stub_insns, sizeof(ppc64_stub_insns)); 431 + for (i = 0; i < sizeof(ppc64_stub_insns) / sizeof(u32); i++) { 432 + if (patch_instruction(&entry->jump[i], 433 + ppc_inst(ppc64_stub_insns[i]))) 434 + return 0; 435 + } 430 436 431 437 /* Stub uses address relative to r2. */ 432 438 reladdr = (unsigned long)entry - my_r2(sechdrs, me); ··· 443 437 } 444 438 pr_debug("Stub %p get data from reladdr %li\n", entry, reladdr); 445 439 446 - entry->jump[0] |= PPC_HA(reladdr); 447 - entry->jump[1] |= PPC_LO(reladdr); 448 - entry->funcdata = func_desc(addr); 449 - entry->magic = STUB_MAGIC; 440 + if (patch_instruction(&entry->jump[0], 441 + ppc_inst(entry->jump[0] | PPC_HA(reladdr)))) 442 + return 0; 443 + 444 + if (patch_instruction(&entry->jump[1], 445 + ppc_inst(entry->jump[1] | PPC_LO(reladdr)))) 446 + return 0; 447 + 448 + // func_desc_t is 8 bytes if ABIv2, else 16 bytes 449 + desc = func_desc(addr); 450 + for (i = 0; i < sizeof(func_desc_t) / sizeof(u32); i++) { 451 + if (patch_instruction(((u32 *)&entry->funcdata) + i, 452 + ppc_inst(((u32 *)(&desc))[i]))) 453 + return 0; 454 + } 455 + 456 + if (patch_instruction(&entry->magic, ppc_inst(STUB_MAGIC))) 457 + return 0; 450 458 451 459 return 1; 452 460 } ··· 515 495 me->name, *instruction, instruction); 516 496 return 0; 517 497 } 498 + 518 499 /* ld r2,R2_STACK_OFFSET(r1) */ 519 - *instruction = PPC_INST_LD_TOC; 500 + if (patch_instruction(instruction, ppc_inst(PPC_INST_LD_TOC))) 501 + return 0; 502 + 520 503 return 1; 521 504 } 522 505 ··· 659 636 } 660 637 661 638 /* Only replace bits 2 through 26 */ 662 - *(uint32_t *)location 663 - = (*(uint32_t *)location & ~0x03fffffc) 639 + value = (*(uint32_t *)location & ~0x03fffffc) 664 640 | (value & 0x03fffffc); 641 + 642 + if (patch_instruction((u32 *)location, ppc_inst(value))) 643 + return -EFAULT; 644 + 665 645 break; 666 646 667 647 case R_PPC64_REL64:
+2 -2
arch/powerpc/platforms/85xx/smp.c
··· 220 220 local_irq_save(flags); 221 221 hard_irq_disable(); 222 222 223 - if (qoriq_pm_ops) 223 + if (qoriq_pm_ops && qoriq_pm_ops->cpu_up_prepare) 224 224 qoriq_pm_ops->cpu_up_prepare(cpu); 225 225 226 226 /* if cpu is not spinning, reset it */ ··· 292 292 booting_thread_hwid = cpu_thread_in_core(nr); 293 293 primary = cpu_first_thread_sibling(nr); 294 294 295 - if (qoriq_pm_ops) 295 + if (qoriq_pm_ops && qoriq_pm_ops->cpu_up_prepare) 296 296 qoriq_pm_ops->cpu_up_prepare(nr); 297 297 298 298 /*
+1
arch/riscv/boot/dts/sifive/hifive-unleashed-a00.dts
··· 76 76 spi-max-frequency = <20000000>; 77 77 voltage-ranges = <3300 3300>; 78 78 disable-wp; 79 + gpios = <&gpio 11 GPIO_ACTIVE_LOW>; 79 80 }; 80 81 }; 81 82
+53 -60
arch/riscv/boot/dts/sifive/hifive-unmatched-a00.dts
··· 2 2 /* Copyright (c) 2020 SiFive, Inc */ 3 3 4 4 #include "fu740-c000.dtsi" 5 + #include <dt-bindings/gpio/gpio.h> 5 6 #include <dt-bindings/interrupt-controller/irq.h> 6 7 7 8 /* Clock frequency (in Hz) of the PCB crystal for rtcclk */ ··· 55 54 temperature-sensor@4c { 56 55 compatible = "ti,tmp451"; 57 56 reg = <0x4c>; 57 + vcc-supply = <&vdd_bpro>; 58 58 interrupt-parent = <&gpio>; 59 59 interrupts = <6 IRQ_TYPE_LEVEL_LOW>; 60 + }; 61 + 62 + eeprom@54 { 63 + compatible = "microchip,24c02", "atmel,24c02"; 64 + reg = <0x54>; 65 + vcc-supply = <&vdd_bpro>; 66 + label = "board-id"; 67 + pagesize = <16>; 68 + read-only; 69 + size = <256>; 60 70 }; 61 71 62 72 pmic@58 { ··· 77 65 interrupts = <1 IRQ_TYPE_LEVEL_LOW>; 78 66 interrupt-controller; 79 67 80 - regulators { 81 - vdd_bcore1: bcore1 { 82 - regulator-min-microvolt = <900000>; 83 - regulator-max-microvolt = <900000>; 84 - regulator-min-microamp = <5000000>; 85 - regulator-max-microamp = <5000000>; 86 - regulator-always-on; 87 - }; 68 + onkey { 69 + compatible = "dlg,da9063-onkey"; 70 + }; 88 71 89 - vdd_bcore2: bcore2 { 90 - regulator-min-microvolt = <900000>; 91 - regulator-max-microvolt = <900000>; 92 - regulator-min-microamp = <5000000>; 93 - regulator-max-microamp = <5000000>; 72 + rtc { 73 + compatible = "dlg,da9063-rtc"; 74 + }; 75 + 76 + wdt { 77 + compatible = "dlg,da9063-watchdog"; 78 + }; 79 + 80 + regulators { 81 + vdd_bcore: bcores-merged { 82 + regulator-min-microvolt = <1050000>; 83 + regulator-max-microvolt = <1050000>; 84 + regulator-min-microamp = <4800000>; 85 + regulator-max-microamp = <4800000>; 94 86 regulator-always-on; 95 87 }; 96 88 97 89 vdd_bpro: bpro { 98 90 regulator-min-microvolt = <1800000>; 99 91 regulator-max-microvolt = <1800000>; 100 - regulator-min-microamp = <2500000>; 101 - regulator-max-microamp = <2500000>; 92 + regulator-min-microamp = <2400000>; 93 + regulator-max-microamp = <2400000>; 102 94 regulator-always-on; 103 95 }; 104 96 105 97 vdd_bperi: bperi { 106 - regulator-min-microvolt = <1050000>; 107 - regulator-max-microvolt = <1050000>; 98 + regulator-min-microvolt = <1060000>; 99 + regulator-max-microvolt = <1060000>; 108 100 regulator-min-microamp = <1500000>; 109 101 regulator-max-microamp = <1500000>; 110 102 regulator-always-on; 111 103 }; 112 104 113 - vdd_bmem: bmem { 114 - regulator-min-microvolt = <1200000>; 115 - regulator-max-microvolt = <1200000>; 116 - regulator-min-microamp = <3000000>; 117 - regulator-max-microamp = <3000000>; 118 - regulator-always-on; 119 - }; 120 - 121 - vdd_bio: bio { 105 + vdd_bmem_bio: bmem-bio-merged { 122 106 regulator-min-microvolt = <1200000>; 123 107 regulator-max-microvolt = <1200000>; 124 108 regulator-min-microamp = <3000000>; ··· 125 117 vdd_ldo1: ldo1 { 126 118 regulator-min-microvolt = <1800000>; 127 119 regulator-max-microvolt = <1800000>; 128 - regulator-min-microamp = <100000>; 129 - regulator-max-microamp = <100000>; 130 120 regulator-always-on; 131 121 }; 132 122 133 123 vdd_ldo2: ldo2 { 134 124 regulator-min-microvolt = <1800000>; 135 125 regulator-max-microvolt = <1800000>; 136 - regulator-min-microamp = <200000>; 137 - regulator-max-microamp = <200000>; 138 126 regulator-always-on; 139 127 }; 140 128 141 129 vdd_ldo3: ldo3 { 142 - regulator-min-microvolt = <1800000>; 143 - regulator-max-microvolt = <1800000>; 144 - regulator-min-microamp = <200000>; 145 - regulator-max-microamp = <200000>; 130 + regulator-min-microvolt = <3300000>; 131 + regulator-max-microvolt = <3300000>; 146 132 regulator-always-on; 147 133 }; 148 134 149 135 vdd_ldo4: ldo4 { 150 - regulator-min-microvolt = <1800000>; 151 - regulator-max-microvolt = <1800000>; 152 - regulator-min-microamp = <200000>; 153 - regulator-max-microamp = <200000>; 136 + regulator-min-microvolt = <2500000>; 137 + regulator-max-microvolt = <2500000>; 154 138 regulator-always-on; 155 139 }; 156 140 157 141 vdd_ldo5: ldo5 { 158 - regulator-min-microvolt = <1800000>; 159 - regulator-max-microvolt = <1800000>; 160 - regulator-min-microamp = <100000>; 161 - regulator-max-microamp = <100000>; 142 + regulator-min-microvolt = <3300000>; 143 + regulator-max-microvolt = <3300000>; 162 144 regulator-always-on; 163 145 }; 164 146 165 147 vdd_ldo6: ldo6 { 166 - regulator-min-microvolt = <3300000>; 167 - regulator-max-microvolt = <3300000>; 168 - regulator-min-microamp = <200000>; 169 - regulator-max-microamp = <200000>; 148 + regulator-min-microvolt = <1800000>; 149 + regulator-max-microvolt = <1800000>; 170 150 regulator-always-on; 171 151 }; 172 152 173 153 vdd_ldo7: ldo7 { 174 - regulator-min-microvolt = <1800000>; 175 - regulator-max-microvolt = <1800000>; 176 - regulator-min-microamp = <200000>; 177 - regulator-max-microamp = <200000>; 154 + regulator-min-microvolt = <3300000>; 155 + regulator-max-microvolt = <3300000>; 178 156 regulator-always-on; 179 157 }; 180 158 181 159 vdd_ldo8: ldo8 { 182 - regulator-min-microvolt = <1800000>; 183 - regulator-max-microvolt = <1800000>; 184 - regulator-min-microamp = <200000>; 185 - regulator-max-microamp = <200000>; 160 + regulator-min-microvolt = <3300000>; 161 + regulator-max-microvolt = <3300000>; 186 162 regulator-always-on; 187 163 }; 188 164 189 165 vdd_ld09: ldo9 { 190 166 regulator-min-microvolt = <1050000>; 191 167 regulator-max-microvolt = <1050000>; 192 - regulator-min-microamp = <200000>; 193 - regulator-max-microamp = <200000>; 168 + regulator-always-on; 194 169 }; 195 170 196 171 vdd_ldo10: ldo10 { 197 172 regulator-min-microvolt = <1000000>; 198 173 regulator-max-microvolt = <1000000>; 199 - regulator-min-microamp = <300000>; 200 - regulator-max-microamp = <300000>; 174 + regulator-always-on; 201 175 }; 202 176 203 177 vdd_ldo11: ldo11 { 204 178 regulator-min-microvolt = <2500000>; 205 179 regulator-max-microvolt = <2500000>; 206 - regulator-min-microamp = <300000>; 207 - regulator-max-microamp = <300000>; 208 180 regulator-always-on; 209 181 }; 210 182 }; ··· 211 223 spi-max-frequency = <20000000>; 212 224 voltage-ranges = <3300 3300>; 213 225 disable-wp; 226 + gpios = <&gpio 15 GPIO_ACTIVE_LOW>; 214 227 }; 215 228 }; 216 229 ··· 234 245 235 246 &gpio { 236 247 status = "okay"; 248 + gpio-line-names = "J29.1", "PMICNTB", "PMICSHDN", "J8.1", "J8.3", 249 + "PCIe_PWREN", "THERM", "UBRDG_RSTN", "PCIe_PERSTN", 250 + "ULPI_RSTN", "J8.2", "UHUB_RSTN", "GEMGXL_RST", "J8.4", 251 + "EN_VDD_SD", "SD_CD"; 237 252 };
+2
arch/s390/configs/debug_defconfig
··· 117 117 CONFIG_UNIX_DIAG=m 118 118 CONFIG_XFRM_USER=m 119 119 CONFIG_NET_KEY=m 120 + CONFIG_NET_SWITCHDEV=y 120 121 CONFIG_SMC=m 121 122 CONFIG_SMC_DIAG=m 122 123 CONFIG_INET=y ··· 512 511 CONFIG_MLX4_EN=m 513 512 CONFIG_MLX5_CORE=m 514 513 CONFIG_MLX5_CORE_EN=y 514 + CONFIG_MLX5_ESWITCH=y 515 515 # CONFIG_NET_VENDOR_MICREL is not set 516 516 # CONFIG_NET_VENDOR_MICROCHIP is not set 517 517 # CONFIG_NET_VENDOR_MICROSEMI is not set
+2
arch/s390/configs/defconfig
··· 109 109 CONFIG_UNIX_DIAG=m 110 110 CONFIG_XFRM_USER=m 111 111 CONFIG_NET_KEY=m 112 + CONFIG_NET_SWITCHDEV=y 112 113 CONFIG_SMC=m 113 114 CONFIG_SMC_DIAG=m 114 115 CONFIG_INET=y ··· 503 502 CONFIG_MLX4_EN=m 504 503 CONFIG_MLX5_CORE=m 505 504 CONFIG_MLX5_CORE_EN=y 505 + CONFIG_MLX5_ESWITCH=y 506 506 # CONFIG_NET_VENDOR_MICREL is not set 507 507 # CONFIG_NET_VENDOR_MICROCHIP is not set 508 508 # CONFIG_NET_VENDOR_MICROSEMI is not set
-2
arch/s390/kernel/ftrace.c
··· 290 290 return; 291 291 292 292 regs = ftrace_get_regs(fregs); 293 - preempt_disable_notrace(); 294 293 p = get_kprobe((kprobe_opcode_t *)ip); 295 294 if (unlikely(!p) || kprobe_disabled(p)) 296 295 goto out; ··· 317 318 } 318 319 __this_cpu_write(current_kprobe, NULL); 319 320 out: 320 - preempt_enable_notrace(); 321 321 ftrace_test_recursion_unlock(bit); 322 322 } 323 323 NOKPROBE_SYMBOL(kprobe_ftrace_handler);
+5 -4
arch/s390/kernel/irq.c
··· 138 138 struct pt_regs *old_regs = set_irq_regs(regs); 139 139 int from_idle; 140 140 141 - irq_enter(); 141 + irq_enter_rcu(); 142 142 143 143 if (user_mode(regs)) { 144 144 update_timer_sys(); ··· 158 158 do_irq_async(regs, IO_INTERRUPT); 159 159 } while (MACHINE_IS_LPAR && irq_pending(regs)); 160 160 161 - irq_exit(); 161 + irq_exit_rcu(); 162 + 162 163 set_irq_regs(old_regs); 163 164 irqentry_exit(regs, state); 164 165 ··· 173 172 struct pt_regs *old_regs = set_irq_regs(regs); 174 173 int from_idle; 175 174 176 - irq_enter(); 175 + irq_enter_rcu(); 177 176 178 177 if (user_mode(regs)) { 179 178 update_timer_sys(); ··· 191 190 192 191 do_irq_async(regs, EXT_INTERRUPT); 193 192 194 - irq_exit(); 193 + irq_exit_rcu(); 195 194 set_irq_regs(old_regs); 196 195 irqentry_exit(regs, state); 197 196
+35 -5
arch/s390/kernel/machine_kexec_file.c
··· 7 7 * Author(s): Philipp Rudo <prudo@linux.vnet.ibm.com> 8 8 */ 9 9 10 + #define pr_fmt(fmt) "kexec: " fmt 11 + 10 12 #include <linux/elf.h> 11 13 #include <linux/errno.h> 12 14 #include <linux/kexec.h> ··· 292 290 const Elf_Shdr *relsec, 293 291 const Elf_Shdr *symtab) 294 292 { 293 + const char *strtab, *name, *shstrtab; 294 + const Elf_Shdr *sechdrs; 295 295 Elf_Rela *relas; 296 296 int i, r_type; 297 + int ret; 298 + 299 + /* String & section header string table */ 300 + sechdrs = (void *)pi->ehdr + pi->ehdr->e_shoff; 301 + strtab = (char *)pi->ehdr + sechdrs[symtab->sh_link].sh_offset; 302 + shstrtab = (char *)pi->ehdr + sechdrs[pi->ehdr->e_shstrndx].sh_offset; 297 303 298 304 relas = (void *)pi->ehdr + relsec->sh_offset; 299 305 ··· 314 304 sym = (void *)pi->ehdr + symtab->sh_offset; 315 305 sym += ELF64_R_SYM(relas[i].r_info); 316 306 317 - if (sym->st_shndx == SHN_UNDEF) 318 - return -ENOEXEC; 307 + if (sym->st_name) 308 + name = strtab + sym->st_name; 309 + else 310 + name = shstrtab + sechdrs[sym->st_shndx].sh_name; 319 311 320 - if (sym->st_shndx == SHN_COMMON) 312 + if (sym->st_shndx == SHN_UNDEF) { 313 + pr_err("Undefined symbol: %s\n", name); 321 314 return -ENOEXEC; 315 + } 316 + 317 + if (sym->st_shndx == SHN_COMMON) { 318 + pr_err("symbol '%s' in common section\n", name); 319 + return -ENOEXEC; 320 + } 322 321 323 322 if (sym->st_shndx >= pi->ehdr->e_shnum && 324 - sym->st_shndx != SHN_ABS) 323 + sym->st_shndx != SHN_ABS) { 324 + pr_err("Invalid section %d for symbol %s\n", 325 + sym->st_shndx, name); 325 326 return -ENOEXEC; 327 + } 326 328 327 329 loc = pi->purgatory_buf; 328 330 loc += section->sh_offset; ··· 348 326 addr = section->sh_addr + relas[i].r_offset; 349 327 350 328 r_type = ELF64_R_TYPE(relas[i].r_info); 351 - arch_kexec_do_relocs(r_type, loc, val, addr); 329 + 330 + if (r_type == R_390_PLT32DBL) 331 + r_type = R_390_PC32DBL; 332 + 333 + ret = arch_kexec_do_relocs(r_type, loc, val, addr); 334 + if (ret) { 335 + pr_err("Unknown rela relocation: %d\n", r_type); 336 + return -ENOEXEC; 337 + } 352 338 } 353 339 return 0; 354 340 }
+15 -1
arch/x86/kvm/mmu/mmu.c
··· 3987 3987 static bool is_page_fault_stale(struct kvm_vcpu *vcpu, 3988 3988 struct kvm_page_fault *fault, int mmu_seq) 3989 3989 { 3990 - if (is_obsolete_sp(vcpu->kvm, to_shadow_page(vcpu->arch.mmu->root_hpa))) 3990 + struct kvm_mmu_page *sp = to_shadow_page(vcpu->arch.mmu->root_hpa); 3991 + 3992 + /* Special roots, e.g. pae_root, are not backed by shadow pages. */ 3993 + if (sp && is_obsolete_sp(vcpu->kvm, sp)) 3994 + return true; 3995 + 3996 + /* 3997 + * Roots without an associated shadow page are considered invalid if 3998 + * there is a pending request to free obsolete roots. The request is 3999 + * only a hint that the current root _may_ be obsolete and needs to be 4000 + * reloaded, e.g. if the guest frees a PGD that KVM is tracking as a 4001 + * previous root, then __kvm_mmu_prepare_zap_page() signals all vCPUs 4002 + * to reload even if no vCPU is actively using the root. 4003 + */ 4004 + if (!sp && kvm_test_request(KVM_REQ_MMU_RELOAD, vcpu)) 3991 4005 return true; 3992 4006 3993 4007 return fault->slot &&
+1 -1
arch/x86/kvm/x86.c
··· 3413 3413 3414 3414 if (!msr_info->host_initiated) 3415 3415 return 1; 3416 - if (guest_cpuid_has(vcpu, X86_FEATURE_PDCM) && kvm_get_msr_feature(&msr_ent)) 3416 + if (kvm_get_msr_feature(&msr_ent)) 3417 3417 return 1; 3418 3418 if (data & ~msr_ent.data) 3419 3419 return 1;
+43 -8
arch/x86/net/bpf_jit_comp.c
··· 1252 1252 case BPF_LDX | BPF_MEM | BPF_DW: 1253 1253 case BPF_LDX | BPF_PROBE_MEM | BPF_DW: 1254 1254 if (BPF_MODE(insn->code) == BPF_PROBE_MEM) { 1255 - /* test src_reg, src_reg */ 1256 - maybe_emit_mod(&prog, src_reg, src_reg, true); /* always 1 byte */ 1257 - EMIT2(0x85, add_2reg(0xC0, src_reg, src_reg)); 1258 - /* jne start_of_ldx */ 1259 - EMIT2(X86_JNE, 0); 1255 + /* Though the verifier prevents negative insn->off in BPF_PROBE_MEM 1256 + * add abs(insn->off) to the limit to make sure that negative 1257 + * offset won't be an issue. 1258 + * insn->off is s16, so it won't affect valid pointers. 1259 + */ 1260 + u64 limit = TASK_SIZE_MAX + PAGE_SIZE + abs(insn->off); 1261 + u8 *end_of_jmp1, *end_of_jmp2; 1262 + 1263 + /* Conservatively check that src_reg + insn->off is a kernel address: 1264 + * 1. src_reg + insn->off >= limit 1265 + * 2. src_reg + insn->off doesn't become small positive. 1266 + * Cannot do src_reg + insn->off >= limit in one branch, 1267 + * since it needs two spare registers, but JIT has only one. 1268 + */ 1269 + 1270 + /* movabsq r11, limit */ 1271 + EMIT2(add_1mod(0x48, AUX_REG), add_1reg(0xB8, AUX_REG)); 1272 + EMIT((u32)limit, 4); 1273 + EMIT(limit >> 32, 4); 1274 + /* cmp src_reg, r11 */ 1275 + maybe_emit_mod(&prog, src_reg, AUX_REG, true); 1276 + EMIT2(0x39, add_2reg(0xC0, src_reg, AUX_REG)); 1277 + /* if unsigned '<' goto end_of_jmp2 */ 1278 + EMIT2(X86_JB, 0); 1279 + end_of_jmp1 = prog; 1280 + 1281 + /* mov r11, src_reg */ 1282 + emit_mov_reg(&prog, true, AUX_REG, src_reg); 1283 + /* add r11, insn->off */ 1284 + maybe_emit_1mod(&prog, AUX_REG, true); 1285 + EMIT2_off32(0x81, add_1reg(0xC0, AUX_REG), insn->off); 1286 + /* jmp if not carry to start_of_ldx 1287 + * Otherwise ERR_PTR(-EINVAL) + 128 will be the user addr 1288 + * that has to be rejected. 1289 + */ 1290 + EMIT2(0x73 /* JNC */, 0); 1291 + end_of_jmp2 = prog; 1292 + 1260 1293 /* xor dst_reg, dst_reg */ 1261 1294 emit_mov_imm32(&prog, false, dst_reg, 0); 1262 1295 /* jmp byte_after_ldx */ 1263 1296 EMIT2(0xEB, 0); 1264 1297 1265 - /* populate jmp_offset for JNE above */ 1266 - temp[4] = prog - temp - 5 /* sizeof(test + jne) */; 1298 + /* populate jmp_offset for JB above to jump to xor dst_reg */ 1299 + end_of_jmp1[-1] = end_of_jmp2 - end_of_jmp1; 1300 + /* populate jmp_offset for JNC above to jump to start_of_ldx */ 1267 1301 start_of_ldx = prog; 1302 + end_of_jmp2[-1] = start_of_ldx - end_of_jmp2; 1268 1303 } 1269 1304 emit_ldx(&prog, BPF_SIZE(insn->code), dst_reg, src_reg, insn->off); 1270 1305 if (BPF_MODE(insn->code) == BPF_PROBE_MEM) { ··· 1340 1305 * End result: x86 insn "mov rbx, qword ptr [rax+0x14]" 1341 1306 * of 4 bytes will be ignored and rbx will be zero inited. 1342 1307 */ 1343 - ex->fixup = (prog - temp) | (reg2pt_regs[dst_reg] << 8); 1308 + ex->fixup = (prog - start_of_ldx) | (reg2pt_regs[dst_reg] << 8); 1344 1309 } 1345 1310 break; 1346 1311
+8 -1
block/blk-iocost.c
··· 2311 2311 hwm = current_hweight_max(iocg); 2312 2312 new_hwi = hweight_after_donation(iocg, old_hwi, hwm, 2313 2313 usage, &now); 2314 - if (new_hwi < hwm) { 2314 + /* 2315 + * Donation calculation assumes hweight_after_donation 2316 + * to be positive, a condition that a donor w/ hwa < 2 2317 + * can't meet. Don't bother with donation if hwa is 2318 + * below 2. It's not gonna make a meaningful difference 2319 + * anyway. 2320 + */ 2321 + if (new_hwi < hwm && hwa >= 2) { 2315 2322 iocg->hweight_donating = hwa; 2316 2323 iocg->hweight_after_donation = new_hwi; 2317 2324 list_add(&iocg->surplus_list, &surpluses);
+1 -2
drivers/Makefile
··· 41 41 # SOC specific infrastructure drivers. 42 42 obj-y += soc/ 43 43 44 - obj-$(CONFIG_VIRTIO) += virtio/ 45 - obj-$(CONFIG_VIRTIO_PCI_LIB) += virtio/ 44 + obj-y += virtio/ 46 45 obj-$(CONFIG_VDPA) += vdpa/ 47 46 obj-$(CONFIG_XEN) += xen/ 48 47
+13 -2
drivers/ata/libata-scsi.c
··· 2859 2859 goto invalid_fld; 2860 2860 } 2861 2861 2862 - if (ata_is_ncq(tf->protocol) && (cdb[2 + cdb_offset] & 0x3) == 0) 2863 - tf->protocol = ATA_PROT_NCQ_NODATA; 2862 + if ((cdb[2 + cdb_offset] & 0x3) == 0) { 2863 + /* 2864 + * When T_LENGTH is zero (No data is transferred), dir should 2865 + * be DMA_NONE. 2866 + */ 2867 + if (scmd->sc_data_direction != DMA_NONE) { 2868 + fp = 2 + cdb_offset; 2869 + goto invalid_fld; 2870 + } 2871 + 2872 + if (ata_is_ncq(tf->protocol)) 2873 + tf->protocol = ATA_PROT_NCQ_NODATA; 2874 + } 2864 2875 2865 2876 /* enable LBA */ 2866 2877 tf->flags |= ATA_TFLAG_LBA;
+12 -3
drivers/clk/clk.c
··· 3418 3418 3419 3419 clk_prepare_lock(); 3420 3420 3421 + /* 3422 + * Set hw->core after grabbing the prepare_lock to synchronize with 3423 + * callers of clk_core_fill_parent_index() where we treat hw->core 3424 + * being NULL as the clk not being registered yet. This is crucial so 3425 + * that clks aren't parented until their parent is fully registered. 3426 + */ 3427 + core->hw->core = core; 3428 + 3421 3429 ret = clk_pm_runtime_get(core); 3422 3430 if (ret) 3423 3431 goto unlock; ··· 3590 3582 out: 3591 3583 clk_pm_runtime_put(core); 3592 3584 unlock: 3593 - if (ret) 3585 + if (ret) { 3594 3586 hlist_del_init(&core->child_node); 3587 + core->hw->core = NULL; 3588 + } 3595 3589 3596 3590 clk_prepare_unlock(); 3597 3591 ··· 3857 3847 core->num_parents = init->num_parents; 3858 3848 core->min_rate = 0; 3859 3849 core->max_rate = ULONG_MAX; 3860 - hw->core = core; 3861 3850 3862 3851 ret = clk_core_populate_parent_map(core, init); 3863 3852 if (ret) ··· 3874 3865 goto fail_create_clk; 3875 3866 } 3876 3867 3877 - clk_core_link_consumer(hw->core, hw->clk); 3868 + clk_core_link_consumer(core, hw->clk); 3878 3869 3879 3870 ret = __clk_core_init(core); 3880 3871 if (!ret)
+2 -2
drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
··· 373 373 struct axi_dma_desc *first) 374 374 { 375 375 u32 priority = chan->chip->dw->hdata->priority[chan->id]; 376 - struct axi_dma_chan_config config; 376 + struct axi_dma_chan_config config = {}; 377 377 u32 irq_mask; 378 378 u8 lms = 0; /* Select AXI0 master for LLI fetching */ 379 379 ··· 391 391 config.tt_fc = DWAXIDMAC_TT_FC_MEM_TO_MEM_DMAC; 392 392 config.prior = priority; 393 393 config.hs_sel_dst = DWAXIDMAC_HS_SEL_HW; 394 - config.hs_sel_dst = DWAXIDMAC_HS_SEL_HW; 394 + config.hs_sel_src = DWAXIDMAC_HS_SEL_HW; 395 395 switch (chan->direction) { 396 396 case DMA_MEM_TO_DEV: 397 397 dw_axi_dma_set_byte_halfword(chan, true);
+1 -9
drivers/dma/dw-edma/dw-edma-pcie.c
··· 187 187 188 188 /* DMA configuration */ 189 189 err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64)); 190 - if (!err) { 190 + if (err) { 191 191 pci_err(pdev, "DMA mask 64 set failed\n"); 192 192 return err; 193 - } else { 194 - pci_err(pdev, "DMA mask 64 set failed\n"); 195 - 196 - err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)); 197 - if (err) { 198 - pci_err(pdev, "DMA mask 32 set failed\n"); 199 - return err; 200 - } 201 193 } 202 194 203 195 /* Data structure allocation */
+1 -1
drivers/dma/idxd/irq.c
··· 137 137 INIT_WORK(&idxd->work, idxd_device_reinit); 138 138 queue_work(idxd->wq, &idxd->work); 139 139 } else { 140 - spin_lock(&idxd->dev_lock); 141 140 idxd->state = IDXD_DEV_HALTED; 142 141 idxd_wqs_quiesce(idxd); 143 142 idxd_wqs_unmap_portal(idxd); 143 + spin_lock(&idxd->dev_lock); 144 144 idxd_device_clear_state(idxd); 145 145 dev_err(&idxd->pdev->dev, 146 146 "idxd halted, need %s.\n",
+17 -1
drivers/dma/idxd/submit.c
··· 106 106 { 107 107 struct idxd_desc *d, *t, *found = NULL; 108 108 struct llist_node *head; 109 + LIST_HEAD(flist); 109 110 110 111 desc->completion->status = IDXD_COMP_DESC_ABORT; 111 112 /* ··· 121 120 found = desc; 122 121 continue; 123 122 } 124 - list_add_tail(&desc->list, &ie->work_list); 123 + 124 + if (d->completion->status) 125 + list_add_tail(&d->list, &flist); 126 + else 127 + list_add_tail(&d->list, &ie->work_list); 125 128 } 126 129 } 127 130 ··· 135 130 136 131 if (found) 137 132 complete_desc(found, IDXD_COMPLETE_ABORT); 133 + 134 + /* 135 + * complete_desc() will return desc to allocator and the desc can be 136 + * acquired by a different process and the desc->list can be modified. 137 + * Delete desc from list so the list trasversing does not get corrupted 138 + * by the other process. 139 + */ 140 + list_for_each_entry_safe(d, t, &flist, list) { 141 + list_del_init(&d->list); 142 + complete_desc(d, IDXD_COMPLETE_NORMAL); 143 + } 138 144 } 139 145 140 146 int idxd_submit_desc(struct idxd_wq *wq, struct idxd_desc *desc)
+1 -1
drivers/dma/st_fdma.c
··· 874 874 MODULE_DESCRIPTION("STMicroelectronics FDMA engine driver"); 875 875 MODULE_AUTHOR("Ludovic.barre <Ludovic.barre@st.com>"); 876 876 MODULE_AUTHOR("Peter Griffin <peter.griffin@linaro.org>"); 877 - MODULE_ALIAS("platform: " DRIVER_NAME); 877 + MODULE_ALIAS("platform:" DRIVER_NAME);
+105 -48
drivers/dma/ti/k3-udma.c
··· 4534 4534 rm_res = tisci_rm->rm_ranges[RM_RANGE_TCHAN]; 4535 4535 if (IS_ERR(rm_res)) { 4536 4536 bitmap_zero(ud->tchan_map, ud->tchan_cnt); 4537 + irq_res.sets = 1; 4537 4538 } else { 4538 4539 bitmap_fill(ud->tchan_map, ud->tchan_cnt); 4539 4540 for (i = 0; i < rm_res->sets; i++) 4540 4541 udma_mark_resource_ranges(ud, ud->tchan_map, 4541 4542 &rm_res->desc[i], "tchan"); 4543 + irq_res.sets = rm_res->sets; 4542 4544 } 4543 - irq_res.sets = rm_res->sets; 4544 4545 4545 4546 /* rchan and matching default flow ranges */ 4546 4547 rm_res = tisci_rm->rm_ranges[RM_RANGE_RCHAN]; 4547 4548 if (IS_ERR(rm_res)) { 4548 4549 bitmap_zero(ud->rchan_map, ud->rchan_cnt); 4550 + irq_res.sets++; 4549 4551 } else { 4550 4552 bitmap_fill(ud->rchan_map, ud->rchan_cnt); 4551 4553 for (i = 0; i < rm_res->sets; i++) 4552 4554 udma_mark_resource_ranges(ud, ud->rchan_map, 4553 4555 &rm_res->desc[i], "rchan"); 4556 + irq_res.sets += rm_res->sets; 4554 4557 } 4555 4558 4556 - irq_res.sets += rm_res->sets; 4557 4559 irq_res.desc = kcalloc(irq_res.sets, sizeof(*irq_res.desc), GFP_KERNEL); 4560 + if (!irq_res.desc) 4561 + return -ENOMEM; 4558 4562 rm_res = tisci_rm->rm_ranges[RM_RANGE_TCHAN]; 4559 - for (i = 0; i < rm_res->sets; i++) { 4560 - irq_res.desc[i].start = rm_res->desc[i].start; 4561 - irq_res.desc[i].num = rm_res->desc[i].num; 4562 - irq_res.desc[i].start_sec = rm_res->desc[i].start_sec; 4563 - irq_res.desc[i].num_sec = rm_res->desc[i].num_sec; 4563 + if (IS_ERR(rm_res)) { 4564 + irq_res.desc[0].start = 0; 4565 + irq_res.desc[0].num = ud->tchan_cnt; 4566 + i = 1; 4567 + } else { 4568 + for (i = 0; i < rm_res->sets; i++) { 4569 + irq_res.desc[i].start = rm_res->desc[i].start; 4570 + irq_res.desc[i].num = rm_res->desc[i].num; 4571 + irq_res.desc[i].start_sec = rm_res->desc[i].start_sec; 4572 + irq_res.desc[i].num_sec = rm_res->desc[i].num_sec; 4573 + } 4564 4574 } 4565 4575 rm_res = tisci_rm->rm_ranges[RM_RANGE_RCHAN]; 4566 - for (j = 0; j < rm_res->sets; j++, i++) { 4567 - if (rm_res->desc[j].num) { 4568 - irq_res.desc[i].start = rm_res->desc[j].start + 4569 - ud->soc_data->oes.udma_rchan; 4570 - irq_res.desc[i].num = rm_res->desc[j].num; 4571 - } 4572 - if (rm_res->desc[j].num_sec) { 4573 - irq_res.desc[i].start_sec = rm_res->desc[j].start_sec + 4574 - ud->soc_data->oes.udma_rchan; 4575 - irq_res.desc[i].num_sec = rm_res->desc[j].num_sec; 4576 + if (IS_ERR(rm_res)) { 4577 + irq_res.desc[i].start = 0; 4578 + irq_res.desc[i].num = ud->rchan_cnt; 4579 + } else { 4580 + for (j = 0; j < rm_res->sets; j++, i++) { 4581 + if (rm_res->desc[j].num) { 4582 + irq_res.desc[i].start = rm_res->desc[j].start + 4583 + ud->soc_data->oes.udma_rchan; 4584 + irq_res.desc[i].num = rm_res->desc[j].num; 4585 + } 4586 + if (rm_res->desc[j].num_sec) { 4587 + irq_res.desc[i].start_sec = rm_res->desc[j].start_sec + 4588 + ud->soc_data->oes.udma_rchan; 4589 + irq_res.desc[i].num_sec = rm_res->desc[j].num_sec; 4590 + } 4576 4591 } 4577 4592 } 4578 4593 ret = ti_sci_inta_msi_domain_alloc_irqs(ud->dev, &irq_res); ··· 4705 4690 rm_res = tisci_rm->rm_ranges[RM_RANGE_BCHAN]; 4706 4691 if (IS_ERR(rm_res)) { 4707 4692 bitmap_zero(ud->bchan_map, ud->bchan_cnt); 4693 + irq_res.sets++; 4708 4694 } else { 4709 4695 bitmap_fill(ud->bchan_map, ud->bchan_cnt); 4710 4696 for (i = 0; i < rm_res->sets; i++) 4711 4697 udma_mark_resource_ranges(ud, ud->bchan_map, 4712 4698 &rm_res->desc[i], 4713 4699 "bchan"); 4700 + irq_res.sets += rm_res->sets; 4714 4701 } 4715 - irq_res.sets += rm_res->sets; 4716 4702 } 4717 4703 4718 4704 /* tchan ranges */ ··· 4721 4705 rm_res = tisci_rm->rm_ranges[RM_RANGE_TCHAN]; 4722 4706 if (IS_ERR(rm_res)) { 4723 4707 bitmap_zero(ud->tchan_map, ud->tchan_cnt); 4708 + irq_res.sets += 2; 4724 4709 } else { 4725 4710 bitmap_fill(ud->tchan_map, ud->tchan_cnt); 4726 4711 for (i = 0; i < rm_res->sets; i++) 4727 4712 udma_mark_resource_ranges(ud, ud->tchan_map, 4728 4713 &rm_res->desc[i], 4729 4714 "tchan"); 4715 + irq_res.sets += rm_res->sets * 2; 4730 4716 } 4731 - irq_res.sets += rm_res->sets * 2; 4732 4717 } 4733 4718 4734 4719 /* rchan ranges */ ··· 4737 4720 rm_res = tisci_rm->rm_ranges[RM_RANGE_RCHAN]; 4738 4721 if (IS_ERR(rm_res)) { 4739 4722 bitmap_zero(ud->rchan_map, ud->rchan_cnt); 4723 + irq_res.sets += 2; 4740 4724 } else { 4741 4725 bitmap_fill(ud->rchan_map, ud->rchan_cnt); 4742 4726 for (i = 0; i < rm_res->sets; i++) 4743 4727 udma_mark_resource_ranges(ud, ud->rchan_map, 4744 4728 &rm_res->desc[i], 4745 4729 "rchan"); 4730 + irq_res.sets += rm_res->sets * 2; 4746 4731 } 4747 - irq_res.sets += rm_res->sets * 2; 4748 4732 } 4749 4733 4750 4734 irq_res.desc = kcalloc(irq_res.sets, sizeof(*irq_res.desc), GFP_KERNEL); 4735 + if (!irq_res.desc) 4736 + return -ENOMEM; 4751 4737 if (ud->bchan_cnt) { 4752 4738 rm_res = tisci_rm->rm_ranges[RM_RANGE_BCHAN]; 4753 - for (i = 0; i < rm_res->sets; i++) { 4754 - irq_res.desc[i].start = rm_res->desc[i].start + 4755 - oes->bcdma_bchan_ring; 4756 - irq_res.desc[i].num = rm_res->desc[i].num; 4739 + if (IS_ERR(rm_res)) { 4740 + irq_res.desc[0].start = oes->bcdma_bchan_ring; 4741 + irq_res.desc[0].num = ud->bchan_cnt; 4742 + i = 1; 4743 + } else { 4744 + for (i = 0; i < rm_res->sets; i++) { 4745 + irq_res.desc[i].start = rm_res->desc[i].start + 4746 + oes->bcdma_bchan_ring; 4747 + irq_res.desc[i].num = rm_res->desc[i].num; 4748 + } 4757 4749 } 4758 4750 } 4759 4751 if (ud->tchan_cnt) { 4760 4752 rm_res = tisci_rm->rm_ranges[RM_RANGE_TCHAN]; 4761 - for (j = 0; j < rm_res->sets; j++, i += 2) { 4762 - irq_res.desc[i].start = rm_res->desc[j].start + 4763 - oes->bcdma_tchan_data; 4764 - irq_res.desc[i].num = rm_res->desc[j].num; 4753 + if (IS_ERR(rm_res)) { 4754 + irq_res.desc[i].start = oes->bcdma_tchan_data; 4755 + irq_res.desc[i].num = ud->tchan_cnt; 4756 + irq_res.desc[i + 1].start = oes->bcdma_tchan_ring; 4757 + irq_res.desc[i + 1].num = ud->tchan_cnt; 4758 + i += 2; 4759 + } else { 4760 + for (j = 0; j < rm_res->sets; j++, i += 2) { 4761 + irq_res.desc[i].start = rm_res->desc[j].start + 4762 + oes->bcdma_tchan_data; 4763 + irq_res.desc[i].num = rm_res->desc[j].num; 4765 4764 4766 - irq_res.desc[i + 1].start = rm_res->desc[j].start + 4767 - oes->bcdma_tchan_ring; 4768 - irq_res.desc[i + 1].num = rm_res->desc[j].num; 4765 + irq_res.desc[i + 1].start = rm_res->desc[j].start + 4766 + oes->bcdma_tchan_ring; 4767 + irq_res.desc[i + 1].num = rm_res->desc[j].num; 4768 + } 4769 4769 } 4770 4770 } 4771 4771 if (ud->rchan_cnt) { 4772 4772 rm_res = tisci_rm->rm_ranges[RM_RANGE_RCHAN]; 4773 - for (j = 0; j < rm_res->sets; j++, i += 2) { 4774 - irq_res.desc[i].start = rm_res->desc[j].start + 4775 - oes->bcdma_rchan_data; 4776 - irq_res.desc[i].num = rm_res->desc[j].num; 4773 + if (IS_ERR(rm_res)) { 4774 + irq_res.desc[i].start = oes->bcdma_rchan_data; 4775 + irq_res.desc[i].num = ud->rchan_cnt; 4776 + irq_res.desc[i + 1].start = oes->bcdma_rchan_ring; 4777 + irq_res.desc[i + 1].num = ud->rchan_cnt; 4778 + i += 2; 4779 + } else { 4780 + for (j = 0; j < rm_res->sets; j++, i += 2) { 4781 + irq_res.desc[i].start = rm_res->desc[j].start + 4782 + oes->bcdma_rchan_data; 4783 + irq_res.desc[i].num = rm_res->desc[j].num; 4777 4784 4778 - irq_res.desc[i + 1].start = rm_res->desc[j].start + 4779 - oes->bcdma_rchan_ring; 4780 - irq_res.desc[i + 1].num = rm_res->desc[j].num; 4785 + irq_res.desc[i + 1].start = rm_res->desc[j].start + 4786 + oes->bcdma_rchan_ring; 4787 + irq_res.desc[i + 1].num = rm_res->desc[j].num; 4788 + } 4781 4789 } 4782 4790 } 4783 4791 ··· 4900 4858 if (IS_ERR(rm_res)) { 4901 4859 /* all rflows are assigned exclusively to Linux */ 4902 4860 bitmap_zero(ud->rflow_in_use, ud->rflow_cnt); 4861 + irq_res.sets = 1; 4903 4862 } else { 4904 4863 bitmap_fill(ud->rflow_in_use, ud->rflow_cnt); 4905 4864 for (i = 0; i < rm_res->sets; i++) 4906 4865 udma_mark_resource_ranges(ud, ud->rflow_in_use, 4907 4866 &rm_res->desc[i], "rflow"); 4867 + irq_res.sets = rm_res->sets; 4908 4868 } 4909 - irq_res.sets = rm_res->sets; 4910 4869 4911 4870 /* tflow ranges */ 4912 4871 rm_res = tisci_rm->rm_ranges[RM_RANGE_TFLOW]; 4913 4872 if (IS_ERR(rm_res)) { 4914 4873 /* all tflows are assigned exclusively to Linux */ 4915 4874 bitmap_zero(ud->tflow_map, ud->tflow_cnt); 4875 + irq_res.sets++; 4916 4876 } else { 4917 4877 bitmap_fill(ud->tflow_map, ud->tflow_cnt); 4918 4878 for (i = 0; i < rm_res->sets; i++) 4919 4879 udma_mark_resource_ranges(ud, ud->tflow_map, 4920 4880 &rm_res->desc[i], "tflow"); 4881 + irq_res.sets += rm_res->sets; 4921 4882 } 4922 - irq_res.sets += rm_res->sets; 4923 4883 4924 4884 irq_res.desc = kcalloc(irq_res.sets, sizeof(*irq_res.desc), GFP_KERNEL); 4885 + if (!irq_res.desc) 4886 + return -ENOMEM; 4925 4887 rm_res = tisci_rm->rm_ranges[RM_RANGE_TFLOW]; 4926 - for (i = 0; i < rm_res->sets; i++) { 4927 - irq_res.desc[i].start = rm_res->desc[i].start + 4928 - oes->pktdma_tchan_flow; 4929 - irq_res.desc[i].num = rm_res->desc[i].num; 4888 + if (IS_ERR(rm_res)) { 4889 + irq_res.desc[0].start = oes->pktdma_tchan_flow; 4890 + irq_res.desc[0].num = ud->tflow_cnt; 4891 + i = 1; 4892 + } else { 4893 + for (i = 0; i < rm_res->sets; i++) { 4894 + irq_res.desc[i].start = rm_res->desc[i].start + 4895 + oes->pktdma_tchan_flow; 4896 + irq_res.desc[i].num = rm_res->desc[i].num; 4897 + } 4930 4898 } 4931 4899 rm_res = tisci_rm->rm_ranges[RM_RANGE_RFLOW]; 4932 - for (j = 0; j < rm_res->sets; j++, i++) { 4933 - irq_res.desc[i].start = rm_res->desc[j].start + 4934 - oes->pktdma_rchan_flow; 4935 - irq_res.desc[i].num = rm_res->desc[j].num; 4900 + if (IS_ERR(rm_res)) { 4901 + irq_res.desc[i].start = oes->pktdma_rchan_flow; 4902 + irq_res.desc[i].num = ud->rflow_cnt; 4903 + } else { 4904 + for (j = 0; j < rm_res->sets; j++, i++) { 4905 + irq_res.desc[i].start = rm_res->desc[j].start + 4906 + oes->pktdma_rchan_flow; 4907 + irq_res.desc[i].num = rm_res->desc[j].num; 4908 + } 4936 4909 } 4937 4910 ret = ti_sci_inta_msi_domain_alloc_irqs(ud->dev, &irq_res); 4938 4911 kfree(irq_res.desc);
+7 -3
drivers/firmware/scpi_pm_domain.c
··· 16 16 struct generic_pm_domain genpd; 17 17 struct scpi_ops *ops; 18 18 u32 domain; 19 - char name[30]; 20 19 }; 21 20 22 21 /* ··· 109 110 110 111 scpi_pd->domain = i; 111 112 scpi_pd->ops = scpi_ops; 112 - sprintf(scpi_pd->name, "%pOFn.%d", np, i); 113 - scpi_pd->genpd.name = scpi_pd->name; 113 + scpi_pd->genpd.name = devm_kasprintf(dev, GFP_KERNEL, 114 + "%pOFn.%d", np, i); 115 + if (!scpi_pd->genpd.name) { 116 + dev_err(dev, "Failed to allocate genpd name:%pOFn.%d\n", 117 + np, i); 118 + continue; 119 + } 114 120 scpi_pd->genpd.power_off = scpi_pd_power_off; 115 121 scpi_pd->genpd.power_on = scpi_pd_power_on; 116 122
+3 -2
drivers/firmware/tegra/bpmp-debugfs.c
··· 77 77 const char *root_path, *filename = NULL; 78 78 char *root_path_buf; 79 79 size_t root_len; 80 + size_t root_path_buf_len = 512; 80 81 81 - root_path_buf = kzalloc(512, GFP_KERNEL); 82 + root_path_buf = kzalloc(root_path_buf_len, GFP_KERNEL); 82 83 if (!root_path_buf) 83 84 goto out; 84 85 85 86 root_path = dentry_path(bpmp->debugfs_mirror, root_path_buf, 86 - sizeof(root_path_buf)); 87 + root_path_buf_len); 87 88 if (IS_ERR(root_path)) 88 89 goto out; 89 90
+2 -2
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
··· 3070 3070 AMD_PG_SUPPORT_CP | 3071 3071 AMD_PG_SUPPORT_GDS | 3072 3072 AMD_PG_SUPPORT_RLC_SMU_HS)) { 3073 - WREG32(mmRLC_JUMP_TABLE_RESTORE, 3074 - adev->gfx.rlc.cp_table_gpu_addr >> 8); 3073 + WREG32_SOC15(GC, 0, mmRLC_JUMP_TABLE_RESTORE, 3074 + adev->gfx.rlc.cp_table_gpu_addr >> 8); 3075 3075 gfx_v9_0_init_gfx_power_gating(adev); 3076 3076 } 3077 3077 }
-1
drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c
··· 162 162 ENABLE_ADVANCED_DRIVER_MODEL, 1); 163 163 tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, 164 164 SYSTEM_APERTURE_UNMAPPED_ACCESS, 0); 165 - tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, ECO_BITS, 0); 166 165 tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, 167 166 MTYPE, MTYPE_UC);/* XXX for emulation. */ 168 167 tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, ATC_EN, 1);
-1
drivers/gpu/drm/amd/amdgpu/gfxhub_v2_0.c
··· 196 196 ENABLE_ADVANCED_DRIVER_MODEL, 1); 197 197 tmp = REG_SET_FIELD(tmp, GCMC_VM_MX_L1_TLB_CNTL, 198 198 SYSTEM_APERTURE_UNMAPPED_ACCESS, 0); 199 - tmp = REG_SET_FIELD(tmp, GCMC_VM_MX_L1_TLB_CNTL, ECO_BITS, 0); 200 199 tmp = REG_SET_FIELD(tmp, GCMC_VM_MX_L1_TLB_CNTL, 201 200 MTYPE, MTYPE_UC); /* UC, uncached */ 202 201
-1
drivers/gpu/drm/amd/amdgpu/gfxhub_v2_1.c
··· 197 197 ENABLE_ADVANCED_DRIVER_MODEL, 1); 198 198 tmp = REG_SET_FIELD(tmp, GCMC_VM_MX_L1_TLB_CNTL, 199 199 SYSTEM_APERTURE_UNMAPPED_ACCESS, 0); 200 - tmp = REG_SET_FIELD(tmp, GCMC_VM_MX_L1_TLB_CNTL, ECO_BITS, 0); 201 200 tmp = REG_SET_FIELD(tmp, GCMC_VM_MX_L1_TLB_CNTL, 202 201 MTYPE, MTYPE_UC); /* UC, uncached */ 203 202
+8
drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
··· 1808 1808 return 0; 1809 1809 } 1810 1810 1811 + /* 1812 + * Pair the operations did in gmc_v9_0_hw_init and thus maintain 1813 + * a correct cached state for GMC. Otherwise, the "gate" again 1814 + * operation on S3 resuming will fail due to wrong cached state. 1815 + */ 1816 + if (adev->mmhub.funcs->update_power_gating) 1817 + adev->mmhub.funcs->update_power_gating(adev, false); 1818 + 1811 1819 amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0); 1812 1820 amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0); 1813 1821
+4 -5
drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
··· 145 145 ENABLE_ADVANCED_DRIVER_MODEL, 1); 146 146 tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, 147 147 SYSTEM_APERTURE_UNMAPPED_ACCESS, 0); 148 - tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, ECO_BITS, 0); 149 148 tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, 150 149 MTYPE, MTYPE_UC);/* XXX for emulation. */ 151 150 tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, ATC_EN, 1); ··· 301 302 if (amdgpu_sriov_vf(adev)) 302 303 return; 303 304 304 - if (enable && adev->pg_flags & AMD_PG_SUPPORT_MMHUB) { 305 - amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_GMC, true); 306 - 307 - } 305 + if (adev->pg_flags & AMD_PG_SUPPORT_MMHUB) 306 + amdgpu_dpm_set_powergating_by_smu(adev, 307 + AMD_IP_BLOCK_TYPE_GMC, 308 + enable); 308 309 } 309 310 310 311 static int mmhub_v1_0_gart_enable(struct amdgpu_device *adev)
-1
drivers/gpu/drm/amd/amdgpu/mmhub_v1_7.c
··· 165 165 ENABLE_ADVANCED_DRIVER_MODEL, 1); 166 166 tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, 167 167 SYSTEM_APERTURE_UNMAPPED_ACCESS, 0); 168 - tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, ECO_BITS, 0); 169 168 tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, 170 169 MTYPE, MTYPE_UC);/* XXX for emulation. */ 171 170 tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, ATC_EN, 1);
-1
drivers/gpu/drm/amd/amdgpu/mmhub_v2_0.c
··· 267 267 ENABLE_ADVANCED_DRIVER_MODEL, 1); 268 268 tmp = REG_SET_FIELD(tmp, MMMC_VM_MX_L1_TLB_CNTL, 269 269 SYSTEM_APERTURE_UNMAPPED_ACCESS, 0); 270 - tmp = REG_SET_FIELD(tmp, MMMC_VM_MX_L1_TLB_CNTL, ECO_BITS, 0); 271 270 tmp = REG_SET_FIELD(tmp, MMMC_VM_MX_L1_TLB_CNTL, 272 271 MTYPE, MTYPE_UC); /* UC, uncached */ 273 272
-1
drivers/gpu/drm/amd/amdgpu/mmhub_v2_3.c
··· 194 194 ENABLE_ADVANCED_DRIVER_MODEL, 1); 195 195 tmp = REG_SET_FIELD(tmp, MMMC_VM_MX_L1_TLB_CNTL, 196 196 SYSTEM_APERTURE_UNMAPPED_ACCESS, 0); 197 - tmp = REG_SET_FIELD(tmp, MMMC_VM_MX_L1_TLB_CNTL, ECO_BITS, 0); 198 197 tmp = REG_SET_FIELD(tmp, MMMC_VM_MX_L1_TLB_CNTL, 199 198 MTYPE, MTYPE_UC); /* UC, uncached */ 200 199
-2
drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.c
··· 190 190 tmp = REG_SET_FIELD(tmp, VMSHAREDVC0_MC_VM_MX_L1_TLB_CNTL, 191 191 SYSTEM_APERTURE_UNMAPPED_ACCESS, 0); 192 192 tmp = REG_SET_FIELD(tmp, VMSHAREDVC0_MC_VM_MX_L1_TLB_CNTL, 193 - ECO_BITS, 0); 194 - tmp = REG_SET_FIELD(tmp, VMSHAREDVC0_MC_VM_MX_L1_TLB_CNTL, 195 193 MTYPE, MTYPE_UC);/* XXX for emulation. */ 196 194 tmp = REG_SET_FIELD(tmp, VMSHAREDVC0_MC_VM_MX_L1_TLB_CNTL, 197 195 ATC_EN, 1);
+5
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
··· 1051 1051 return 0; 1052 1052 } 1053 1053 1054 + /* Reset DMCUB if it was previously running - before we overwrite its memory. */ 1055 + status = dmub_srv_hw_reset(dmub_srv); 1056 + if (status != DMUB_STATUS_OK) 1057 + DRM_WARN("Error resetting DMUB HW: %d\n", status); 1058 + 1054 1059 hdr = (const struct dmcub_firmware_header_v1_0 *)dmub_fw->data; 1055 1060 1056 1061 fw_inst_const = dmub_fw->data +
+1
drivers/gpu/drm/amd/display/dc/dcn31/dcn31_init.c
··· 101 101 .z10_restore = dcn31_z10_restore, 102 102 .z10_save_init = dcn31_z10_save_init, 103 103 .set_disp_pattern_generator = dcn30_set_disp_pattern_generator, 104 + .exit_optimized_pwr_state = dcn21_exit_optimized_pwr_state, 104 105 .update_visual_confirm_color = dcn20_update_visual_confirm_color, 105 106 }; 106 107
+6 -1
drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
··· 1328 1328 pp_dpm_powergate_vce(handle, gate); 1329 1329 break; 1330 1330 case AMD_IP_BLOCK_TYPE_GMC: 1331 - pp_dpm_powergate_mmhub(handle); 1331 + /* 1332 + * For now, this is only used on PICASSO. 1333 + * And only "gate" operation is supported. 1334 + */ 1335 + if (gate) 1336 + pp_dpm_powergate_mmhub(handle); 1332 1337 break; 1333 1338 case AMD_IP_BLOCK_TYPE_GFX: 1334 1339 ret = pp_dpm_powergate_gfx(handle, gate);
+3
drivers/gpu/drm/amd/pm/swsmu/smu12/smu_v12_0.c
··· 191 191 kfree(smu_table->watermarks_table); 192 192 smu_table->watermarks_table = NULL; 193 193 194 + kfree(smu_table->gpu_metrics_table); 195 + smu_table->gpu_metrics_table = NULL; 196 + 194 197 return 0; 195 198 } 196 199
+3
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
··· 198 198 199 199 int smu_v13_0_check_fw_version(struct smu_context *smu) 200 200 { 201 + struct amdgpu_device *adev = smu->adev; 201 202 uint32_t if_version = 0xff, smu_version = 0xff; 202 203 uint16_t smu_major; 203 204 uint8_t smu_minor, smu_debug; ··· 211 210 smu_major = (smu_version >> 16) & 0xffff; 212 211 smu_minor = (smu_version >> 8) & 0xff; 213 212 smu_debug = (smu_version >> 0) & 0xff; 213 + if (smu->is_apu) 214 + adev->pm.fw_version = smu_version; 214 215 215 216 switch (smu->adev->ip_versions[MP1_HWIP][0]) { 216 217 case IP_VERSION(13, 0, 2):
+4 -1
drivers/gpu/drm/ast/ast_mode.c
··· 1121 1121 if (crtc->state) 1122 1122 crtc->funcs->atomic_destroy_state(crtc, crtc->state); 1123 1123 1124 - __drm_atomic_helper_crtc_reset(crtc, &ast_state->base); 1124 + if (ast_state) 1125 + __drm_atomic_helper_crtc_reset(crtc, &ast_state->base); 1126 + else 1127 + __drm_atomic_helper_crtc_reset(crtc, NULL); 1125 1128 } 1126 1129 1127 1130 static struct drm_crtc_state *
+7 -1
drivers/gpu/drm/drm_fb_helper.c
··· 1743 1743 sizes->fb_width, sizes->fb_height); 1744 1744 1745 1745 info->par = fb_helper; 1746 - snprintf(info->fix.id, sizeof(info->fix.id), "%s", 1746 + /* 1747 + * The DRM drivers fbdev emulation device name can be confusing if the 1748 + * driver name also has a "drm" suffix on it. Leading to names such as 1749 + * "simpledrmdrmfb" in /proc/fb. Unfortunately, it's an uAPI and can't 1750 + * be changed due user-space tools (e.g: pm-utils) matching against it. 1751 + */ 1752 + snprintf(info->fix.id, sizeof(info->fix.id), "%sdrmfb", 1747 1753 fb_helper->dev->driver->name); 1748 1754 1749 1755 }
+1 -1
drivers/gpu/drm/i915/display/intel_dmc.c
··· 596 596 continue; 597 597 598 598 offset = readcount + dmc->dmc_info[id].dmc_offset * 4; 599 - if (fw->size - offset < 0) { 599 + if (offset > fw->size) { 600 600 drm_err(&dev_priv->drm, "Reading beyond the fw_size\n"); 601 601 continue; 602 602 }
+1 -1
drivers/gpu/drm/tiny/simpledrm.c
··· 458 458 { 459 459 struct drm_display_mode mode = { SIMPLEDRM_MODE(width, height) }; 460 460 461 - mode.clock = 60 /* Hz */ * mode.hdisplay * mode.vdisplay; 461 + mode.clock = mode.hdisplay * mode.vdisplay * 60 / 1000 /* kHz */; 462 462 drm_mode_set_name(&mode); 463 463 464 464 return mode;
+1
drivers/hv/Kconfig
··· 19 19 config HYPERV_UTILS 20 20 tristate "Microsoft Hyper-V Utilities driver" 21 21 depends on HYPERV && CONNECTOR && NLS 22 + depends on PTP_1588_CLOCK_OPTIONAL 22 23 help 23 24 Select this option to enable the Hyper-V Utilities. 24 25
+2 -1
drivers/md/bcache/super.c
··· 1139 1139 static void cached_dev_detach_finish(struct work_struct *w) 1140 1140 { 1141 1141 struct cached_dev *dc = container_of(w, struct cached_dev, detach); 1142 + struct cache_set *c = dc->disk.c; 1142 1143 1143 1144 BUG_ON(!test_bit(BCACHE_DEV_DETACHING, &dc->disk.flags)); 1144 1145 BUG_ON(refcount_read(&dc->count)); ··· 1157 1156 1158 1157 bcache_device_detach(&dc->disk); 1159 1158 list_move(&dc->list, &uncached_devices); 1160 - calc_cached_dev_sectors(dc->disk.c); 1159 + calc_cached_dev_sectors(c); 1161 1160 1162 1161 clear_bit(BCACHE_DEV_DETACHING, &dc->disk.flags); 1163 1162 clear_bit(BCACHE_DEV_UNLINK_DONE, &dc->disk.flags);
+1 -1
drivers/md/dm-integrity.c
··· 1963 1963 n_sectors -= bv.bv_len >> SECTOR_SHIFT; 1964 1964 bio_advance_iter(bio, &bio->bi_iter, bv.bv_len); 1965 1965 retry_kmap: 1966 - mem = bvec_kmap_local(&bv); 1966 + mem = kmap_local_page(bv.bv_page); 1967 1967 if (likely(dio->op == REQ_OP_WRITE)) 1968 1968 flush_dcache_page(bv.bv_page); 1969 1969
+1 -1
drivers/md/persistent-data/dm-btree-remove.c
··· 423 423 424 424 memcpy(n, dm_block_data(child), 425 425 dm_bm_block_size(dm_tm_get_bm(info->tm))); 426 - dm_tm_unlock(info->tm, child); 427 426 428 427 dm_tm_dec(info->tm, dm_block_location(child)); 428 + dm_tm_unlock(info->tm, child); 429 429 return 0; 430 430 } 431 431
+4
drivers/net/dsa/mv88e6xxx/chip.c
··· 768 768 if ((!mv88e6xxx_port_ppu_updates(chip, port) || 769 769 mode == MLO_AN_FIXED) && ops->port_sync_link) 770 770 err = ops->port_sync_link(chip, port, mode, false); 771 + 772 + if (!err && ops->port_set_speed_duplex) 773 + err = ops->port_set_speed_duplex(chip, port, SPEED_UNFORCED, 774 + DUPLEX_UNFORCED); 771 775 mv88e6xxx_reg_unlock(chip); 772 776 773 777 if (err)
+2 -2
drivers/net/dsa/mv88e6xxx/port.c
··· 283 283 if (err) 284 284 return err; 285 285 286 - if (speed) 286 + if (speed != SPEED_UNFORCED) 287 287 dev_dbg(chip->dev, "p%d: Speed set to %d Mbps\n", port, speed); 288 288 else 289 289 dev_dbg(chip->dev, "p%d: Speed unforced\n", port); ··· 516 516 if (err) 517 517 return err; 518 518 519 - if (speed) 519 + if (speed != SPEED_UNFORCED) 520 520 dev_dbg(chip->dev, "p%d: Speed set to %d Mbps\n", port, speed); 521 521 else 522 522 dev_dbg(chip->dev, "p%d: Speed unforced\n", port);
+4 -1
drivers/net/ethernet/broadcom/bcmsysport.c
··· 1309 1309 struct bcm_sysport_priv *priv = netdev_priv(dev); 1310 1310 struct device *kdev = &priv->pdev->dev; 1311 1311 struct bcm_sysport_tx_ring *ring; 1312 + unsigned long flags, desc_flags; 1312 1313 struct bcm_sysport_cb *cb; 1313 1314 struct netdev_queue *txq; 1314 1315 u32 len_status, addr_lo; 1315 1316 unsigned int skb_len; 1316 - unsigned long flags; 1317 1317 dma_addr_t mapping; 1318 1318 u16 queue; 1319 1319 int ret; ··· 1373 1373 ring->desc_count--; 1374 1374 1375 1375 /* Ports are latched, so write upper address first */ 1376 + spin_lock_irqsave(&priv->desc_lock, desc_flags); 1376 1377 tdma_writel(priv, len_status, TDMA_WRITE_PORT_HI(ring->index)); 1377 1378 tdma_writel(priv, addr_lo, TDMA_WRITE_PORT_LO(ring->index)); 1379 + spin_unlock_irqrestore(&priv->desc_lock, desc_flags); 1378 1380 1379 1381 /* Check ring space and update SW control flow */ 1380 1382 if (ring->desc_count == 0) ··· 2015 2013 } 2016 2014 2017 2015 /* Initialize both hardware and software ring */ 2016 + spin_lock_init(&priv->desc_lock); 2018 2017 for (i = 0; i < dev->num_tx_queues; i++) { 2019 2018 ret = bcm_sysport_init_tx_ring(priv, i); 2020 2019 if (ret) {
+1
drivers/net/ethernet/broadcom/bcmsysport.h
··· 711 711 int wol_irq; 712 712 713 713 /* Transmit rings */ 714 + spinlock_t desc_lock; 714 715 struct bcm_sysport_tx_ring *tx_rings; 715 716 716 717 /* Receive queue */
+2 -2
drivers/net/ethernet/broadcom/genet/bcmmii.c
··· 589 589 * Internal or external PHY with MDIO access 590 590 */ 591 591 phydev = phy_attach(priv->dev, phy_name, pd->phy_interface); 592 - if (!phydev) { 592 + if (IS_ERR(phydev)) { 593 593 dev_err(kdev, "failed to register PHY device\n"); 594 - return -ENODEV; 594 + return PTR_ERR(phydev); 595 595 } 596 596 } else { 597 597 /*
+2
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h
··· 388 388 __u64 bytes_per_cdan; 389 389 }; 390 390 391 + #define DPAA2_ETH_CH_STATS 7 392 + 391 393 /* Maximum number of queues associated with a DPNI */ 392 394 #define DPAA2_ETH_MAX_TCS 8 393 395 #define DPAA2_ETH_MAX_RX_QUEUES_PER_TC 16
+1 -1
drivers/net/ethernet/freescale/dpaa2/dpaa2-ethtool.c
··· 278 278 /* Per-channel stats */ 279 279 for (k = 0; k < priv->num_channels; k++) { 280 280 ch_stats = &priv->channel[k]->stats; 281 - for (j = 0; j < sizeof(*ch_stats) / sizeof(__u64) - 1; j++) 281 + for (j = 0; j < DPAA2_ETH_CH_STATS; j++) 282 282 *((__u64 *)data + i + j) += *((__u64 *)ch_stats + j); 283 283 } 284 284 i += j;
+2
drivers/net/ethernet/hisilicon/hns3/hnae3.h
··· 839 839 840 840 u8 netdev_flags; 841 841 struct dentry *hnae3_dbgfs; 842 + /* protects concurrent contention between debugfs commands */ 843 + struct mutex dbgfs_lock; 842 844 843 845 /* Network interface message level enabled bits */ 844 846 u32 msg_enable;
+14 -6
drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c
··· 1226 1226 if (ret) 1227 1227 return ret; 1228 1228 1229 + mutex_lock(&handle->dbgfs_lock); 1229 1230 save_buf = &hns3_dbg_cmd[index].buf; 1230 1231 1231 1232 if (!test_bit(HNS3_NIC_STATE_INITED, &priv->state) || ··· 1239 1238 read_buf = *save_buf; 1240 1239 } else { 1241 1240 read_buf = kvzalloc(hns3_dbg_cmd[index].buf_len, GFP_KERNEL); 1242 - if (!read_buf) 1243 - return -ENOMEM; 1241 + if (!read_buf) { 1242 + ret = -ENOMEM; 1243 + goto out; 1244 + } 1244 1245 1245 1246 /* save the buffer addr until the last read operation */ 1246 1247 *save_buf = read_buf; 1247 - } 1248 1248 1249 - /* get data ready for the first time to read */ 1250 - if (!*ppos) { 1249 + /* get data ready for the first time to read */ 1251 1250 ret = hns3_dbg_read_cmd(dbg_data, hns3_dbg_cmd[index].cmd, 1252 1251 read_buf, hns3_dbg_cmd[index].buf_len); 1253 1252 if (ret) ··· 1256 1255 1257 1256 size = simple_read_from_buffer(buffer, count, ppos, read_buf, 1258 1257 strlen(read_buf)); 1259 - if (size > 0) 1258 + if (size > 0) { 1259 + mutex_unlock(&handle->dbgfs_lock); 1260 1260 return size; 1261 + } 1261 1262 1262 1263 out: 1263 1264 /* free the buffer for the last read operation */ ··· 1268 1265 *save_buf = NULL; 1269 1266 } 1270 1267 1268 + mutex_unlock(&handle->dbgfs_lock); 1271 1269 return ret; 1272 1270 } 1273 1271 ··· 1341 1337 debugfs_create_dir(hns3_dbg_dentry[i].name, 1342 1338 handle->hnae3_dbgfs); 1343 1339 1340 + mutex_init(&handle->dbgfs_lock); 1341 + 1344 1342 for (i = 0; i < ARRAY_SIZE(hns3_dbg_cmd); i++) { 1345 1343 if ((hns3_dbg_cmd[i].cmd == HNAE3_DBG_CMD_TM_NODES && 1346 1344 ae_dev->dev_version <= HNAE3_DEVICE_VERSION_V2) || ··· 1369 1363 return 0; 1370 1364 1371 1365 out: 1366 + mutex_destroy(&handle->dbgfs_lock); 1372 1367 debugfs_remove_recursive(handle->hnae3_dbgfs); 1373 1368 handle->hnae3_dbgfs = NULL; 1374 1369 return ret; ··· 1385 1378 hns3_dbg_cmd[i].buf = NULL; 1386 1379 } 1387 1380 1381 + mutex_destroy(&handle->dbgfs_lock); 1388 1382 debugfs_remove_recursive(handle->hnae3_dbgfs); 1389 1383 handle->hnae3_dbgfs = NULL; 1390 1384 }
+2 -1
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_mbx.c
··· 114 114 115 115 memcpy(&req->msg, send_msg, sizeof(struct hclge_vf_to_pf_msg)); 116 116 117 - trace_hclge_vf_mbx_send(hdev, req); 117 + if (test_bit(HCLGEVF_STATE_NIC_REGISTERED, &hdev->state)) 118 + trace_hclge_vf_mbx_send(hdev, req); 118 119 119 120 /* synchronous send */ 120 121 if (need_resp) {
+2 -3
drivers/net/ethernet/intel/iavf/iavf_main.c
··· 2046 2046 } 2047 2047 adapter->aq_required = 0; 2048 2048 adapter->current_op = VIRTCHNL_OP_UNKNOWN; 2049 + mutex_unlock(&adapter->crit_lock); 2049 2050 queue_delayed_work(iavf_wq, 2050 2051 &adapter->watchdog_task, 2051 2052 msecs_to_jiffies(10)); ··· 2077 2076 iavf_detect_recover_hung(&adapter->vsi); 2078 2077 break; 2079 2078 case __IAVF_REMOVE: 2080 - mutex_unlock(&adapter->crit_lock); 2081 - return; 2082 2079 default: 2080 + mutex_unlock(&adapter->crit_lock); 2083 2081 return; 2084 2082 } 2085 2083 2086 2084 /* check for hw reset */ 2087 2085 reg_val = rd32(hw, IAVF_VF_ARQLEN1) & IAVF_VF_ARQLEN1_ARQENABLE_MASK; 2088 2086 if (!reg_val) { 2089 - iavf_change_state(adapter, __IAVF_RESETTING); 2090 2087 adapter->flags |= IAVF_FLAG_RESET_PENDING; 2091 2088 adapter->aq_required = 0; 2092 2089 adapter->current_op = VIRTCHNL_OP_UNKNOWN;
+5 -8
drivers/net/ethernet/intel/ice/ice_ptp.c
··· 705 705 scaled_ppm = -scaled_ppm; 706 706 } 707 707 708 - while ((u64)scaled_ppm > div_u64(U64_MAX, incval)) { 708 + while ((u64)scaled_ppm > div64_u64(U64_MAX, incval)) { 709 709 /* handle overflow by scaling down the scaled_ppm and 710 710 * the divisor, losing some precision 711 711 */ ··· 1540 1540 if (err) 1541 1541 continue; 1542 1542 1543 - /* Check if the timestamp is valid */ 1544 - if (!(raw_tstamp & ICE_PTP_TS_VALID)) 1543 + /* Check if the timestamp is invalid or stale */ 1544 + if (!(raw_tstamp & ICE_PTP_TS_VALID) || 1545 + raw_tstamp == tx->tstamps[idx].cached_tstamp) 1545 1546 continue; 1546 - 1547 - /* clear the timestamp register, so that it won't show valid 1548 - * again when re-used. 1549 - */ 1550 - ice_clear_phy_tstamp(hw, tx->quad, phy_idx); 1551 1547 1552 1548 /* The timestamp is valid, so we'll go ahead and clear this 1553 1549 * index and then send the timestamp up to the stack. 1554 1550 */ 1555 1551 spin_lock(&tx->lock); 1552 + tx->tstamps[idx].cached_tstamp = raw_tstamp; 1556 1553 clear_bit(idx, tx->in_use); 1557 1554 skb = tx->tstamps[idx].skb; 1558 1555 tx->tstamps[idx].skb = NULL;
+6
drivers/net/ethernet/intel/ice/ice_ptp.h
··· 55 55 * struct ice_tx_tstamp - Tracking for a single Tx timestamp 56 56 * @skb: pointer to the SKB for this timestamp request 57 57 * @start: jiffies when the timestamp was first requested 58 + * @cached_tstamp: last read timestamp 58 59 * 59 60 * This structure tracks a single timestamp request. The SKB pointer is 60 61 * provided when initiating a request. The start time is used to ensure that 61 62 * we discard old requests that were not fulfilled within a 2 second time 62 63 * window. 64 + * Timestamp values in the PHY are read only and do not get cleared except at 65 + * hardware reset or when a new timestamp value is captured. The cached_tstamp 66 + * field is used to detect the case where a new timestamp has not yet been 67 + * captured, ensuring that we avoid sending stale timestamp data to the stack. 63 68 */ 64 69 struct ice_tx_tstamp { 65 70 struct sk_buff *skb; 66 71 unsigned long start; 72 + u64 cached_tstamp; 67 73 }; 68 74 69 75 /**
+14 -14
drivers/net/ethernet/intel/igb/igb_main.c
··· 7648 7648 struct vf_mac_filter *entry = NULL; 7649 7649 int ret = 0; 7650 7650 7651 + if ((vf_data->flags & IGB_VF_FLAG_PF_SET_MAC) && 7652 + !vf_data->trusted) { 7653 + dev_warn(&pdev->dev, 7654 + "VF %d requested MAC filter but is administratively denied\n", 7655 + vf); 7656 + return -EINVAL; 7657 + } 7658 + if (!is_valid_ether_addr(addr)) { 7659 + dev_warn(&pdev->dev, 7660 + "VF %d attempted to set invalid MAC filter\n", 7661 + vf); 7662 + return -EINVAL; 7663 + } 7664 + 7651 7665 switch (info) { 7652 7666 case E1000_VF_MAC_FILTER_CLR: 7653 7667 /* remove all unicast MAC filters related to the current VF */ ··· 7675 7661 } 7676 7662 break; 7677 7663 case E1000_VF_MAC_FILTER_ADD: 7678 - if ((vf_data->flags & IGB_VF_FLAG_PF_SET_MAC) && 7679 - !vf_data->trusted) { 7680 - dev_warn(&pdev->dev, 7681 - "VF %d requested MAC filter but is administratively denied\n", 7682 - vf); 7683 - return -EINVAL; 7684 - } 7685 - if (!is_valid_ether_addr(addr)) { 7686 - dev_warn(&pdev->dev, 7687 - "VF %d attempted to set invalid MAC filter\n", 7688 - vf); 7689 - return -EINVAL; 7690 - } 7691 - 7692 7664 /* try to find empty slot in the list */ 7693 7665 list_for_each(pos, &adapter->vf_macs.l) { 7694 7666 entry = list_entry(pos, struct vf_mac_filter, l);
+1
drivers/net/ethernet/intel/igbvf/netdev.c
··· 2859 2859 return 0; 2860 2860 2861 2861 err_hw_init: 2862 + netif_napi_del(&adapter->rx_ring->napi); 2862 2863 kfree(adapter->tx_ring); 2863 2864 kfree(adapter->rx_ring); 2864 2865 err_sw_init:
+1 -1
drivers/net/ethernet/intel/igc/igc_i225.c
··· 636 636 ltrv = rd32(IGC_LTRMAXV); 637 637 if (ltr_max != (ltrv & IGC_LTRMAXV_LTRV_MASK)) { 638 638 ltrv = IGC_LTRMAXV_LSNP_REQ | ltr_max | 639 - (scale_min << IGC_LTRMAXV_SCALE_SHIFT); 639 + (scale_max << IGC_LTRMAXV_SCALE_SHIFT); 640 640 wr32(IGC_LTRMAXV, ltrv); 641 641 } 642 642 }
+4
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
··· 5531 5531 if (!speed && hw->mac.ops.get_link_capabilities) { 5532 5532 ret = hw->mac.ops.get_link_capabilities(hw, &speed, 5533 5533 &autoneg); 5534 + /* remove NBASE-T speeds from default autonegotiation 5535 + * to accommodate broken network switches in the field 5536 + * which cannot cope with advertised NBASE-T speeds 5537 + */ 5534 5538 speed &= ~(IXGBE_LINK_SPEED_5GB_FULL | 5535 5539 IXGBE_LINK_SPEED_2_5GB_FULL); 5536 5540 }
+3
drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c
··· 3405 3405 /* flush pending Tx transactions */ 3406 3406 ixgbe_clear_tx_pending(hw); 3407 3407 3408 + /* set MDIO speed before talking to the PHY in case it's the 1st time */ 3409 + ixgbe_set_mdio_speed(hw); 3410 + 3408 3411 /* PHY ops must be identified and initialized prior to reset */ 3409 3412 status = hw->phy.ops.init(hw); 3410 3413 if (status == IXGBE_ERR_SFP_NOT_SUPPORTED ||
+2 -1
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
··· 8494 8494 u8 mac_profile; 8495 8495 int err; 8496 8496 8497 - if (!mlxsw_sp_rif_mac_profile_is_shared(rif)) 8497 + if (!mlxsw_sp_rif_mac_profile_is_shared(rif) && 8498 + !mlxsw_sp_rif_mac_profile_find(mlxsw_sp, new_mac)) 8498 8499 return mlxsw_sp_rif_mac_profile_edit(rif, new_mac); 8499 8500 8500 8501 err = mlxsw_sp_rif_mac_profile_get(mlxsw_sp, new_mac,
+3
drivers/net/ethernet/sfc/ef100_nic.c
··· 609 609 ef100_common_stat_mask(mask); 610 610 ef100_ethtool_stat_mask(mask); 611 611 612 + if (!mc_stats) 613 + return 0; 614 + 612 615 efx_nic_copy_stats(efx, mc_stats); 613 616 efx_nic_update_stats(ef100_stat_desc, EF100_STAT_COUNT, mask, 614 617 stats, mc_stats, false);
+3 -1
drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
··· 33 33 void (*set_rgmii_speed)(struct rk_priv_data *bsp_priv, int speed); 34 34 void (*set_rmii_speed)(struct rk_priv_data *bsp_priv, int speed); 35 35 void (*integrated_phy_powerup)(struct rk_priv_data *bsp_priv); 36 + bool regs_valid; 36 37 u32 regs[]; 37 38 }; 38 39 ··· 1093 1092 .set_to_rmii = rk3568_set_to_rmii, 1094 1093 .set_rgmii_speed = rk3568_set_gmac_speed, 1095 1094 .set_rmii_speed = rk3568_set_gmac_speed, 1095 + .regs_valid = true, 1096 1096 .regs = { 1097 1097 0xfe2a0000, /* gmac0 */ 1098 1098 0xfe010000, /* gmac1 */ ··· 1385 1383 * to be distinguished. 1386 1384 */ 1387 1385 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 1388 - if (res) { 1386 + if (res && ops->regs_valid) { 1389 1387 int i = 0; 1390 1388 1391 1389 while (ops->regs[i]) {
+17
drivers/net/ethernet/stmicro/stmmac/stmmac.h
··· 172 172 int is_l4; 173 173 }; 174 174 175 + /* Rx Frame Steering */ 176 + enum stmmac_rfs_type { 177 + STMMAC_RFS_T_VLAN, 178 + STMMAC_RFS_T_MAX, 179 + }; 180 + 181 + struct stmmac_rfs_entry { 182 + unsigned long cookie; 183 + int in_use; 184 + int type; 185 + int tc; 186 + }; 187 + 175 188 struct stmmac_priv { 176 189 /* Frequently used values are kept adjacent for cache effect */ 177 190 u32 tx_coal_frames[MTL_MAX_TX_QUEUES]; ··· 302 289 struct stmmac_tc_entry *tc_entries; 303 290 unsigned int flow_entries_max; 304 291 struct stmmac_flow_entry *flow_entries; 292 + unsigned int rfs_entries_max[STMMAC_RFS_T_MAX]; 293 + unsigned int rfs_entries_cnt[STMMAC_RFS_T_MAX]; 294 + unsigned int rfs_entries_total; 295 + struct stmmac_rfs_entry *rfs_entries; 305 296 306 297 /* Pulse Per Second output */ 307 298 struct stmmac_pps_cfg pps[STMMAC_PPS_MAX];
+12 -4
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
··· 1461 1461 { 1462 1462 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue]; 1463 1463 struct stmmac_rx_buffer *buf = &rx_q->buf_pool[i]; 1464 + gfp_t gfp = (GFP_ATOMIC | __GFP_NOWARN); 1465 + 1466 + if (priv->dma_cap.addr64 <= 32) 1467 + gfp |= GFP_DMA32; 1464 1468 1465 1469 if (!buf->page) { 1466 - buf->page = page_pool_dev_alloc_pages(rx_q->page_pool); 1470 + buf->page = page_pool_alloc_pages(rx_q->page_pool, gfp); 1467 1471 if (!buf->page) 1468 1472 return -ENOMEM; 1469 1473 buf->page_offset = stmmac_rx_offset(priv); 1470 1474 } 1471 1475 1472 1476 if (priv->sph && !buf->sec_page) { 1473 - buf->sec_page = page_pool_dev_alloc_pages(rx_q->page_pool); 1477 + buf->sec_page = page_pool_alloc_pages(rx_q->page_pool, gfp); 1474 1478 if (!buf->sec_page) 1475 1479 return -ENOMEM; 1476 1480 ··· 4486 4482 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue]; 4487 4483 int dirty = stmmac_rx_dirty(priv, queue); 4488 4484 unsigned int entry = rx_q->dirty_rx; 4485 + gfp_t gfp = (GFP_ATOMIC | __GFP_NOWARN); 4486 + 4487 + if (priv->dma_cap.addr64 <= 32) 4488 + gfp |= GFP_DMA32; 4489 4489 4490 4490 while (dirty-- > 0) { 4491 4491 struct stmmac_rx_buffer *buf = &rx_q->buf_pool[entry]; ··· 4502 4494 p = rx_q->dma_rx + entry; 4503 4495 4504 4496 if (!buf->page) { 4505 - buf->page = page_pool_dev_alloc_pages(rx_q->page_pool); 4497 + buf->page = page_pool_alloc_pages(rx_q->page_pool, gfp); 4506 4498 if (!buf->page) 4507 4499 break; 4508 4500 } 4509 4501 4510 4502 if (priv->sph && !buf->sec_page) { 4511 - buf->sec_page = page_pool_dev_alloc_pages(rx_q->page_pool); 4503 + buf->sec_page = page_pool_alloc_pages(rx_q->page_pool, gfp); 4512 4504 if (!buf->sec_page) 4513 4505 break; 4514 4506
+73 -13
drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c
··· 232 232 } 233 233 } 234 234 235 + static int tc_rfs_init(struct stmmac_priv *priv) 236 + { 237 + int i; 238 + 239 + priv->rfs_entries_max[STMMAC_RFS_T_VLAN] = 8; 240 + 241 + for (i = 0; i < STMMAC_RFS_T_MAX; i++) 242 + priv->rfs_entries_total += priv->rfs_entries_max[i]; 243 + 244 + priv->rfs_entries = devm_kcalloc(priv->device, 245 + priv->rfs_entries_total, 246 + sizeof(*priv->rfs_entries), 247 + GFP_KERNEL); 248 + if (!priv->rfs_entries) 249 + return -ENOMEM; 250 + 251 + dev_info(priv->device, "Enabled RFS Flow TC (entries=%d)\n", 252 + priv->rfs_entries_total); 253 + 254 + return 0; 255 + } 256 + 235 257 static int tc_init(struct stmmac_priv *priv) 236 258 { 237 259 struct dma_features *dma_cap = &priv->dma_cap; 238 260 unsigned int count; 239 - int i; 261 + int ret, i; 240 262 241 263 if (dma_cap->l3l4fnum) { 242 264 priv->flow_entries_max = dma_cap->l3l4fnum; ··· 272 250 for (i = 0; i < priv->flow_entries_max; i++) 273 251 priv->flow_entries[i].idx = i; 274 252 275 - dev_info(priv->device, "Enabled Flow TC (entries=%d)\n", 253 + dev_info(priv->device, "Enabled L3L4 Flow TC (entries=%d)\n", 276 254 priv->flow_entries_max); 277 255 } 256 + 257 + ret = tc_rfs_init(priv); 258 + if (ret) 259 + return -ENOMEM; 278 260 279 261 if (!priv->plat->fpe_cfg) { 280 262 priv->plat->fpe_cfg = devm_kzalloc(priv->device, ··· 633 607 return ret; 634 608 } 635 609 610 + static struct stmmac_rfs_entry *tc_find_rfs(struct stmmac_priv *priv, 611 + struct flow_cls_offload *cls, 612 + bool get_free) 613 + { 614 + int i; 615 + 616 + for (i = 0; i < priv->rfs_entries_total; i++) { 617 + struct stmmac_rfs_entry *entry = &priv->rfs_entries[i]; 618 + 619 + if (entry->cookie == cls->cookie) 620 + return entry; 621 + if (get_free && entry->in_use == false) 622 + return entry; 623 + } 624 + 625 + return NULL; 626 + } 627 + 636 628 #define VLAN_PRIO_FULL_MASK (0x07) 637 629 638 630 static int tc_add_vlan_flow(struct stmmac_priv *priv, 639 631 struct flow_cls_offload *cls) 640 632 { 633 + struct stmmac_rfs_entry *entry = tc_find_rfs(priv, cls, false); 641 634 struct flow_rule *rule = flow_cls_offload_flow_rule(cls); 642 635 struct flow_dissector *dissector = rule->match.dissector; 643 636 int tc = tc_classid_to_hwtc(priv->dev, cls->classid); 644 637 struct flow_match_vlan match; 638 + 639 + if (!entry) { 640 + entry = tc_find_rfs(priv, cls, true); 641 + if (!entry) 642 + return -ENOENT; 643 + } 644 + 645 + if (priv->rfs_entries_cnt[STMMAC_RFS_T_VLAN] >= 646 + priv->rfs_entries_max[STMMAC_RFS_T_VLAN]) 647 + return -ENOENT; 645 648 646 649 /* Nothing to do here */ 647 650 if (!dissector_uses_key(dissector, FLOW_DISSECTOR_KEY_VLAN)) ··· 693 638 694 639 prio = BIT(match.key->vlan_priority); 695 640 stmmac_rx_queue_prio(priv, priv->hw, prio, tc); 641 + 642 + entry->in_use = true; 643 + entry->cookie = cls->cookie; 644 + entry->tc = tc; 645 + entry->type = STMMAC_RFS_T_VLAN; 646 + priv->rfs_entries_cnt[STMMAC_RFS_T_VLAN]++; 696 647 } 697 648 698 649 return 0; ··· 707 646 static int tc_del_vlan_flow(struct stmmac_priv *priv, 708 647 struct flow_cls_offload *cls) 709 648 { 710 - struct flow_rule *rule = flow_cls_offload_flow_rule(cls); 711 - struct flow_dissector *dissector = rule->match.dissector; 712 - int tc = tc_classid_to_hwtc(priv->dev, cls->classid); 649 + struct stmmac_rfs_entry *entry = tc_find_rfs(priv, cls, false); 713 650 714 - /* Nothing to do here */ 715 - if (!dissector_uses_key(dissector, FLOW_DISSECTOR_KEY_VLAN)) 716 - return -EINVAL; 651 + if (!entry || !entry->in_use || entry->type != STMMAC_RFS_T_VLAN) 652 + return -ENOENT; 717 653 718 - if (tc < 0) { 719 - netdev_err(priv->dev, "Invalid traffic class\n"); 720 - return -EINVAL; 721 - } 654 + stmmac_rx_queue_prio(priv, priv->hw, 0, entry->tc); 722 655 723 - stmmac_rx_queue_prio(priv, priv->hw, 0, tc); 656 + entry->in_use = false; 657 + entry->cookie = 0; 658 + entry->tc = 0; 659 + entry->type = 0; 660 + 661 + priv->rfs_entries_cnt[STMMAC_RFS_T_VLAN]--; 724 662 725 663 return 0; 726 664 }
+20 -9
drivers/net/ethernet/ti/am65-cpsw-nuss.c
··· 1844 1844 if (ret < 0) { 1845 1845 dev_err(dev, "%pOF error reading port_id %d\n", 1846 1846 port_np, ret); 1847 - return ret; 1847 + goto of_node_put; 1848 1848 } 1849 1849 1850 1850 if (!port_id || port_id > common->port_num) { 1851 1851 dev_err(dev, "%pOF has invalid port_id %u %s\n", 1852 1852 port_np, port_id, port_np->name); 1853 - return -EINVAL; 1853 + ret = -EINVAL; 1854 + goto of_node_put; 1854 1855 } 1855 1856 1856 1857 port = am65_common_get_port(common, port_id); ··· 1867 1866 (AM65_CPSW_NU_FRAM_PORT_OFFSET * (port_id - 1)); 1868 1867 1869 1868 port->slave.mac_sl = cpsw_sl_get("am65", dev, port->port_base); 1870 - if (IS_ERR(port->slave.mac_sl)) 1871 - return PTR_ERR(port->slave.mac_sl); 1869 + if (IS_ERR(port->slave.mac_sl)) { 1870 + ret = PTR_ERR(port->slave.mac_sl); 1871 + goto of_node_put; 1872 + } 1872 1873 1873 1874 port->disabled = !of_device_is_available(port_np); 1874 1875 if (port->disabled) { ··· 1883 1880 ret = PTR_ERR(port->slave.ifphy); 1884 1881 dev_err(dev, "%pOF error retrieving port phy: %d\n", 1885 1882 port_np, ret); 1886 - return ret; 1883 + goto of_node_put; 1887 1884 } 1888 1885 1889 1886 port->slave.mac_only = ··· 1892 1889 /* get phy/link info */ 1893 1890 if (of_phy_is_fixed_link(port_np)) { 1894 1891 ret = of_phy_register_fixed_link(port_np); 1895 - if (ret) 1896 - return dev_err_probe(dev, ret, 1892 + if (ret) { 1893 + ret = dev_err_probe(dev, ret, 1897 1894 "failed to register fixed-link phy %pOF\n", 1898 1895 port_np); 1896 + goto of_node_put; 1897 + } 1899 1898 port->slave.phy_node = of_node_get(port_np); 1900 1899 } else { 1901 1900 port->slave.phy_node = ··· 1907 1902 if (!port->slave.phy_node) { 1908 1903 dev_err(dev, 1909 1904 "slave[%d] no phy found\n", port_id); 1910 - return -ENODEV; 1905 + ret = -ENODEV; 1906 + goto of_node_put; 1911 1907 } 1912 1908 1913 1909 ret = of_get_phy_mode(port_np, &port->slave.phy_if); 1914 1910 if (ret) { 1915 1911 dev_err(dev, "%pOF read phy-mode err %d\n", 1916 1912 port_np, ret); 1917 - return ret; 1913 + goto of_node_put; 1918 1914 } 1919 1915 1920 1916 ret = of_get_mac_address(port_np, port->slave.mac_addr); ··· 1938 1932 } 1939 1933 1940 1934 return 0; 1935 + 1936 + of_node_put: 1937 + of_node_put(port_np); 1938 + of_node_put(node); 1939 + return ret; 1941 1940 } 1942 1941 1943 1942 static void am65_cpsw_pcpu_stats_free(void *data)
+1
drivers/net/netdevsim/bpf.c
··· 514 514 goto err_free; 515 515 key = nmap->entry[i].key; 516 516 *key = i; 517 + memset(nmap->entry[i].value, 0, offmap->map.value_size); 517 518 } 518 519 } 519 520
+4 -1
drivers/net/netdevsim/ethtool.c
··· 77 77 { 78 78 struct netdevsim *ns = netdev_priv(dev); 79 79 80 - memcpy(&ns->ethtool.ring, ring, sizeof(ns->ethtool.ring)); 80 + ns->ethtool.ring.rx_pending = ring->rx_pending; 81 + ns->ethtool.ring.rx_jumbo_pending = ring->rx_jumbo_pending; 82 + ns->ethtool.ring.rx_mini_pending = ring->rx_mini_pending; 83 + ns->ethtool.ring.tx_pending = ring->tx_pending; 81 84 return 0; 82 85 } 83 86
+3
drivers/net/phy/mdio_bus.c
··· 460 460 461 461 if (addr == mdiodev->addr) { 462 462 device_set_node(dev, of_fwnode_handle(child)); 463 + /* The refcount on "child" is passed to the mdio 464 + * device. Do _not_ use of_node_put(child) here. 465 + */ 463 466 return; 464 467 } 465 468 }
+6
drivers/net/usb/lan78xx.c
··· 76 76 #define LAN7801_USB_PRODUCT_ID (0x7801) 77 77 #define LAN78XX_EEPROM_MAGIC (0x78A5) 78 78 #define LAN78XX_OTP_MAGIC (0x78F3) 79 + #define AT29M2AF_USB_VENDOR_ID (0x07C9) 80 + #define AT29M2AF_USB_PRODUCT_ID (0x0012) 79 81 80 82 #define MII_READ 1 81 83 #define MII_WRITE 0 ··· 4735 4733 { 4736 4734 /* LAN7801 USB Gigabit Ethernet Device */ 4737 4735 USB_DEVICE(LAN78XX_USB_VENDOR_ID, LAN7801_USB_PRODUCT_ID), 4736 + }, 4737 + { 4738 + /* ATM2-AF USB Gigabit Ethernet Device */ 4739 + USB_DEVICE(AT29M2AF_USB_VENDOR_ID, AT29M2AF_USB_PRODUCT_ID), 4738 4740 }, 4739 4741 {}, 4740 4742 };
+1
drivers/net/usb/qmi_wwan.c
··· 1358 1358 {QMI_QUIRK_SET_DTR(0x1bc7, 0x1040, 2)}, /* Telit LE922A */ 1359 1359 {QMI_QUIRK_SET_DTR(0x1bc7, 0x1050, 2)}, /* Telit FN980 */ 1360 1360 {QMI_QUIRK_SET_DTR(0x1bc7, 0x1060, 2)}, /* Telit LN920 */ 1361 + {QMI_QUIRK_SET_DTR(0x1bc7, 0x1070, 2)}, /* Telit FN990 */ 1361 1362 {QMI_FIXED_INTF(0x1bc7, 0x1100, 3)}, /* Telit ME910 */ 1362 1363 {QMI_FIXED_INTF(0x1bc7, 0x1101, 3)}, /* Telit ME910 dual modem */ 1363 1364 {QMI_FIXED_INTF(0x1bc7, 0x1200, 5)}, /* Telit LE920 */
+3 -6
drivers/net/virtio_net.c
··· 733 733 pr_debug("%s: rx error: len %u exceeds max size %d\n", 734 734 dev->name, len, GOOD_PACKET_LEN); 735 735 dev->stats.rx_length_errors++; 736 - goto err_len; 736 + goto err; 737 737 } 738 738 739 739 if (likely(!vi->xdp_enabled)) { ··· 825 825 826 826 skip_xdp: 827 827 skb = build_skb(buf, buflen); 828 - if (!skb) { 829 - put_page(page); 828 + if (!skb) 830 829 goto err; 831 - } 832 830 skb_reserve(skb, headroom - delta); 833 831 skb_put(skb, len); 834 832 if (!xdp_prog) { ··· 837 839 if (metasize) 838 840 skb_metadata_set(skb, metasize); 839 841 840 - err: 841 842 return skb; 842 843 843 844 err_xdp: 844 845 rcu_read_unlock(); 845 846 stats->xdp_drops++; 846 - err_len: 847 + err: 847 848 stats->drops++; 848 849 put_page(page); 849 850 xdp_xmit:
+9 -5
drivers/net/wireless/broadcom/brcm80211/Kconfig
··· 7 7 depends on MAC80211 8 8 depends on BCMA_POSSIBLE 9 9 select BCMA 10 - select NEW_LEDS if BCMA_DRIVER_GPIO 11 - select LEDS_CLASS if BCMA_DRIVER_GPIO 12 10 select BRCMUTIL 13 11 select FW_LOADER 14 12 select CORDIC 15 13 help 16 14 This module adds support for PCIe wireless adapters based on Broadcom 17 - IEEE802.11n SoftMAC chipsets. It also has WLAN led support, which will 18 - be available if you select BCMA_DRIVER_GPIO. If you choose to build a 19 - module, the driver will be called brcmsmac.ko. 15 + IEEE802.11n SoftMAC chipsets. If you choose to build a module, the 16 + driver will be called brcmsmac.ko. 17 + 18 + config BRCMSMAC_LEDS 19 + def_bool BRCMSMAC && BCMA_DRIVER_GPIO && MAC80211_LEDS 20 + help 21 + The brcmsmac LED support depends on the presence of the 22 + BCMA_DRIVER_GPIO driver, and it only works if LED support 23 + is enabled and reachable from the driver module. 20 24 21 25 source "drivers/net/wireless/broadcom/brcm80211/brcmfmac/Kconfig" 22 26
+1 -1
drivers/net/wireless/broadcom/brcm80211/brcmsmac/Makefile
··· 42 42 brcms_trace_events.o \ 43 43 debug.o 44 44 45 - brcmsmac-$(CONFIG_BCMA_DRIVER_GPIO) += led.o 45 + brcmsmac-$(CONFIG_BRCMSMAC_LEDS) += led.o 46 46 47 47 obj-$(CONFIG_BRCMSMAC) += brcmsmac.o
+1 -1
drivers/net/wireless/broadcom/brcm80211/brcmsmac/led.h
··· 24 24 struct gpio_desc *gpiod; 25 25 }; 26 26 27 - #ifdef CONFIG_BCMA_DRIVER_GPIO 27 + #ifdef CONFIG_BRCMSMAC_LEDS 28 28 void brcms_led_unregister(struct brcms_info *wl); 29 29 int brcms_led_register(struct brcms_info *wl); 30 30 #else
+2 -2
drivers/net/wireless/intel/iwlegacy/Kconfig
··· 2 2 config IWLEGACY 3 3 tristate 4 4 select FW_LOADER 5 - select NEW_LEDS 6 - select LEDS_CLASS 7 5 select LEDS_TRIGGERS 8 6 select MAC80211_LEDS 9 7 10 8 config IWL4965 11 9 tristate "Intel Wireless WiFi 4965AGN (iwl4965)" 12 10 depends on PCI && MAC80211 11 + depends on LEDS_CLASS=y || LEDS_CLASS=MAC80211 13 12 select IWLEGACY 14 13 help 15 14 This option enables support for ··· 37 38 config IWL3945 38 39 tristate "Intel PRO/Wireless 3945ABG/BG Network Connection (iwl3945)" 39 40 depends on PCI && MAC80211 41 + depends on LEDS_CLASS=y || LEDS_CLASS=MAC80211 40 42 select IWLEGACY 41 43 help 42 44 Select to build the driver supporting the:
+1 -1
drivers/net/wireless/intel/iwlwifi/Kconfig
··· 47 47 48 48 config IWLWIFI_LEDS 49 49 bool 50 - depends on LEDS_CLASS=y || LEDS_CLASS=IWLWIFI 50 + depends on LEDS_CLASS=y || LEDS_CLASS=MAC80211 51 51 depends on IWLMVM || IWLDVM 52 52 select LEDS_TRIGGERS 53 53 select MAC80211_LEDS
+3 -2
drivers/net/wireless/intel/iwlwifi/mvm/tx.c
··· 269 269 u8 rate_plcp; 270 270 u32 rate_flags = 0; 271 271 bool is_cck; 272 - struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta); 273 272 274 273 /* info->control is only relevant for non HW rate control */ 275 274 if (!ieee80211_hw_check(mvm->hw, HAS_RATE_CONTROL)) { 275 + struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta); 276 + 276 277 /* HT rate doesn't make sense for a non data frame */ 277 278 WARN_ONCE(info->control.rates[0].flags & IEEE80211_TX_RC_MCS && 278 279 !ieee80211_is_data(fc), 279 280 "Got a HT rate (flags:0x%x/mcs:%d/fc:0x%x/state:%d) for a non data frame\n", 280 281 info->control.rates[0].flags, 281 282 info->control.rates[0].idx, 282 - le16_to_cpu(fc), mvmsta->sta_state); 283 + le16_to_cpu(fc), sta ? mvmsta->sta_state : -1); 283 284 284 285 rate_idx = info->control.rates[0].idx; 285 286 }
+1 -1
drivers/net/wireless/mediatek/mt76/Makefile
··· 34 34 obj-$(CONFIG_MT7603E) += mt7603/ 35 35 obj-$(CONFIG_MT7615_COMMON) += mt7615/ 36 36 obj-$(CONFIG_MT7915E) += mt7915/ 37 - obj-$(CONFIG_MT7921E) += mt7921/ 37 + obj-$(CONFIG_MT7921_COMMON) += mt7921/
+2 -2
drivers/pci/controller/Kconfig
··· 332 332 If unsure, say Y if you have an Apple Silicon system. 333 333 334 334 config PCIE_MT7621 335 - tristate "MediaTek MT7621 PCIe Controller" 336 - depends on (RALINK && SOC_MT7621) || (MIPS && COMPILE_TEST) 335 + bool "MediaTek MT7621 PCIe Controller" 336 + depends on SOC_MT7621 || (MIPS && COMPILE_TEST) 337 337 select PHY_MT7621_PCI 338 338 default SOC_MT7621 339 339 help
+11 -4
drivers/pci/msi.c
··· 722 722 goto out_disable; 723 723 } 724 724 725 - /* Ensure that all table entries are masked. */ 726 - msix_mask_all(base, tsize); 727 - 728 725 ret = msix_setup_entries(dev, base, entries, nvec, affd); 729 726 if (ret) 730 727 goto out_disable; ··· 748 751 /* Set MSI-X enabled bits and unmask the function */ 749 752 pci_intx_for_msi(dev, 0); 750 753 dev->msix_enabled = 1; 754 + 755 + /* 756 + * Ensure that all table entries are masked to prevent 757 + * stale entries from firing in a crash kernel. 758 + * 759 + * Done late to deal with a broken Marvell NVME device 760 + * which takes the MSI-X mask bits into account even 761 + * when MSI-X is disabled, which prevents MSI delivery. 762 + */ 763 + msix_mask_all(base, tsize); 751 764 pci_msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_MASKALL, 0); 752 765 753 766 pcibios_free_irq(dev); ··· 784 777 free_msi_irqs(dev); 785 778 786 779 out_disable: 787 - pci_msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_ENABLE, 0); 780 + pci_msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_MASKALL | PCI_MSIX_FLAGS_ENABLE, 0); 788 781 789 782 return ret; 790 783 }
+1 -8
drivers/reset/tegra/reset-bpmp.c
··· 20 20 struct tegra_bpmp *bpmp = to_tegra_bpmp(rstc); 21 21 struct mrq_reset_request request; 22 22 struct tegra_bpmp_message msg; 23 - int err; 24 23 25 24 memset(&request, 0, sizeof(request)); 26 25 request.cmd = command; ··· 30 31 msg.tx.data = &request; 31 32 msg.tx.size = sizeof(request); 32 33 33 - err = tegra_bpmp_transfer(bpmp, &msg); 34 - if (err) 35 - return err; 36 - if (msg.rx.ret) 37 - return -EINVAL; 38 - 39 - return 0; 34 + return tegra_bpmp_transfer(bpmp, &msg); 40 35 } 41 36 42 37 static int tegra_bpmp_reset_module(struct reset_controller_dev *rstc,
+21 -17
drivers/scsi/pm8001/pm80xx_hwi.c
··· 3053 3053 struct smp_completion_resp *psmpPayload; 3054 3054 struct task_status_struct *ts; 3055 3055 struct pm8001_device *pm8001_dev; 3056 - char *pdma_respaddr = NULL; 3057 3056 3058 3057 psmpPayload = (struct smp_completion_resp *)(piomb + 4); 3059 3058 status = le32_to_cpu(psmpPayload->status); ··· 3079 3080 if (pm8001_dev) 3080 3081 atomic_dec(&pm8001_dev->running_req); 3081 3082 if (pm8001_ha->smp_exp_mode == SMP_DIRECT) { 3083 + struct scatterlist *sg_resp = &t->smp_task.smp_resp; 3084 + u8 *payload; 3085 + void *to; 3086 + 3082 3087 pm8001_dbg(pm8001_ha, IO, 3083 3088 "DIRECT RESPONSE Length:%d\n", 3084 3089 param); 3085 - pdma_respaddr = (char *)(phys_to_virt(cpu_to_le64 3086 - ((u64)sg_dma_address 3087 - (&t->smp_task.smp_resp)))); 3090 + to = kmap_atomic(sg_page(sg_resp)); 3091 + payload = to + sg_resp->offset; 3088 3092 for (i = 0; i < param; i++) { 3089 - *(pdma_respaddr+i) = psmpPayload->_r_a[i]; 3093 + *(payload + i) = psmpPayload->_r_a[i]; 3090 3094 pm8001_dbg(pm8001_ha, IO, 3091 3095 "SMP Byte%d DMA data 0x%x psmp 0x%x\n", 3092 - i, *(pdma_respaddr + i), 3096 + i, *(payload + i), 3093 3097 psmpPayload->_r_a[i]); 3094 3098 } 3099 + kunmap_atomic(to); 3095 3100 } 3096 3101 break; 3097 3102 case IO_ABORTED: ··· 4239 4236 struct sas_task *task = ccb->task; 4240 4237 struct domain_device *dev = task->dev; 4241 4238 struct pm8001_device *pm8001_dev = dev->lldd_dev; 4242 - struct scatterlist *sg_req, *sg_resp; 4239 + struct scatterlist *sg_req, *sg_resp, *smp_req; 4243 4240 u32 req_len, resp_len; 4244 4241 struct smp_req smp_cmd; 4245 4242 u32 opc; 4246 4243 struct inbound_queue_table *circularQ; 4247 - char *preq_dma_addr = NULL; 4248 - __le64 tmp_addr; 4249 4244 u32 i, length; 4245 + u8 *payload; 4246 + u8 *to; 4250 4247 4251 4248 memset(&smp_cmd, 0, sizeof(smp_cmd)); 4252 4249 /* ··· 4283 4280 pm8001_ha->smp_exp_mode = SMP_INDIRECT; 4284 4281 4285 4282 4286 - tmp_addr = cpu_to_le64((u64)sg_dma_address(&task->smp_task.smp_req)); 4287 - preq_dma_addr = (char *)phys_to_virt(tmp_addr); 4283 + smp_req = &task->smp_task.smp_req; 4284 + to = kmap_atomic(sg_page(smp_req)); 4285 + payload = to + smp_req->offset; 4288 4286 4289 4287 /* INDIRECT MODE command settings. Use DMA */ 4290 4288 if (pm8001_ha->smp_exp_mode == SMP_INDIRECT) { ··· 4293 4289 /* for SPCv indirect mode. Place the top 4 bytes of 4294 4290 * SMP Request header here. */ 4295 4291 for (i = 0; i < 4; i++) 4296 - smp_cmd.smp_req16[i] = *(preq_dma_addr + i); 4292 + smp_cmd.smp_req16[i] = *(payload + i); 4297 4293 /* exclude top 4 bytes for SMP req header */ 4298 4294 smp_cmd.long_smp_req.long_req_addr = 4299 4295 cpu_to_le64((u64)sg_dma_address ··· 4324 4320 pm8001_dbg(pm8001_ha, IO, "SMP REQUEST DIRECT MODE\n"); 4325 4321 for (i = 0; i < length; i++) 4326 4322 if (i < 16) { 4327 - smp_cmd.smp_req16[i] = *(preq_dma_addr+i); 4323 + smp_cmd.smp_req16[i] = *(payload + i); 4328 4324 pm8001_dbg(pm8001_ha, IO, 4329 4325 "Byte[%d]:%x (DMA data:%x)\n", 4330 4326 i, smp_cmd.smp_req16[i], 4331 - *(preq_dma_addr)); 4327 + *(payload)); 4332 4328 } else { 4333 - smp_cmd.smp_req[i] = *(preq_dma_addr+i); 4329 + smp_cmd.smp_req[i] = *(payload + i); 4334 4330 pm8001_dbg(pm8001_ha, IO, 4335 4331 "Byte[%d]:%x (DMA data:%x)\n", 4336 4332 i, smp_cmd.smp_req[i], 4337 - *(preq_dma_addr)); 4333 + *(payload)); 4338 4334 } 4339 4335 } 4340 - 4336 + kunmap_atomic(to); 4341 4337 build_smp_cmd(pm8001_dev->device_id, smp_cmd.tag, 4342 4338 &smp_cmd, pm8001_ha->smp_exp_mode, length); 4343 4339 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &smp_cmd,
+19
drivers/soc/imx/imx8m-blk-ctrl.c
··· 17 17 18 18 #define BLK_SFT_RSTN 0x0 19 19 #define BLK_CLK_EN 0x4 20 + #define BLK_MIPI_RESET_DIV 0x8 /* Mini/Nano DISPLAY_BLK_CTRL only */ 20 21 21 22 struct imx8m_blk_ctrl_domain; 22 23 ··· 37 36 const char *gpc_name; 38 37 u32 rst_mask; 39 38 u32 clk_mask; 39 + 40 + /* 41 + * i.MX8M Mini and Nano have a third DISPLAY_BLK_CTRL register 42 + * which is used to control the reset for the MIPI Phy. 43 + * Since it's only present in certain circumstances, 44 + * an if-statement should be used before setting and clearing this 45 + * register. 46 + */ 47 + u32 mipi_phy_rst_mask; 40 48 }; 41 49 42 50 #define DOMAIN_MAX_CLKS 3 ··· 88 78 89 79 /* put devices into reset */ 90 80 regmap_clear_bits(bc->regmap, BLK_SFT_RSTN, data->rst_mask); 81 + if (data->mipi_phy_rst_mask) 82 + regmap_clear_bits(bc->regmap, BLK_MIPI_RESET_DIV, data->mipi_phy_rst_mask); 91 83 92 84 /* enable upstream and blk-ctrl clocks to allow reset to propagate */ 93 85 ret = clk_bulk_prepare_enable(data->num_clks, domain->clks); ··· 111 99 112 100 /* release reset */ 113 101 regmap_set_bits(bc->regmap, BLK_SFT_RSTN, data->rst_mask); 102 + if (data->mipi_phy_rst_mask) 103 + regmap_set_bits(bc->regmap, BLK_MIPI_RESET_DIV, data->mipi_phy_rst_mask); 114 104 115 105 /* disable upstream clocks */ 116 106 clk_bulk_disable_unprepare(data->num_clks, domain->clks); ··· 134 120 struct imx8m_blk_ctrl *bc = domain->bc; 135 121 136 122 /* put devices into reset and disable clocks */ 123 + if (data->mipi_phy_rst_mask) 124 + regmap_clear_bits(bc->regmap, BLK_MIPI_RESET_DIV, data->mipi_phy_rst_mask); 125 + 137 126 regmap_clear_bits(bc->regmap, BLK_SFT_RSTN, data->rst_mask); 138 127 regmap_clear_bits(bc->regmap, BLK_CLK_EN, data->clk_mask); 139 128 ··· 497 480 .gpc_name = "mipi-dsi", 498 481 .rst_mask = BIT(5), 499 482 .clk_mask = BIT(8) | BIT(9), 483 + .mipi_phy_rst_mask = BIT(17), 500 484 }, 501 485 [IMX8MM_DISPBLK_PD_MIPI_CSI] = { 502 486 .name = "dispblk-mipi-csi", ··· 506 488 .gpc_name = "mipi-csi", 507 489 .rst_mask = BIT(3) | BIT(4), 508 490 .clk_mask = BIT(10) | BIT(11), 491 + .mipi_phy_rst_mask = BIT(16), 509 492 }, 510 493 }; 511 494
+4
drivers/soc/imx/soc-imx.c
··· 36 36 int ret; 37 37 int i; 38 38 39 + /* Return early if this is running on devices with different SoCs */ 40 + if (!__mxc_cpu_type) 41 + return 0; 42 + 39 43 if (of_machine_is_compatible("fsl,ls1021a")) 40 44 return 0; 41 45
+1 -1
drivers/soc/tegra/fuse/fuse-tegra.c
··· 320 320 }; 321 321 builtin_platform_driver(tegra_fuse_driver); 322 322 323 - bool __init tegra_fuse_read_spare(unsigned int spare) 323 + u32 __init tegra_fuse_read_spare(unsigned int spare) 324 324 { 325 325 unsigned int offset = fuse->soc->info->spare + spare * 4; 326 326
+1 -1
drivers/soc/tegra/fuse/fuse.h
··· 65 65 void tegra_init_revision(void); 66 66 void tegra_init_apbmisc(void); 67 67 68 - bool __init tegra_fuse_read_spare(unsigned int spare); 68 + u32 __init tegra_fuse_read_spare(unsigned int spare); 69 69 u32 __init tegra_fuse_read_early(unsigned int offset); 70 70 71 71 u8 tegra_get_major_rev(void);
+2 -3
drivers/tee/amdtee/core.c
··· 203 203 204 204 *ta_size = roundup(fw->size, PAGE_SIZE); 205 205 *ta = (void *)__get_free_pages(GFP_KERNEL, get_order(*ta_size)); 206 - if (IS_ERR(*ta)) { 207 - pr_err("%s: get_free_pages failed 0x%llx\n", __func__, 208 - (u64)*ta); 206 + if (!*ta) { 207 + pr_err("%s: get_free_pages failed\n", __func__); 209 208 rc = -ENOMEM; 210 209 goto rel_fw; 211 210 }
+22 -1
drivers/tty/n_hdlc.c
··· 140 140 struct n_hdlc_buf_list rx_buf_list; 141 141 struct n_hdlc_buf_list tx_free_buf_list; 142 142 struct n_hdlc_buf_list rx_free_buf_list; 143 + struct work_struct write_work; 144 + struct tty_struct *tty_for_write_work; 143 145 }; 144 146 145 147 /* ··· 156 154 /* Local functions */ 157 155 158 156 static struct n_hdlc *n_hdlc_alloc(void); 157 + static void n_hdlc_tty_write_work(struct work_struct *work); 159 158 160 159 /* max frame size for memory allocations */ 161 160 static int maxframe = 4096; ··· 213 210 wake_up_interruptible(&tty->read_wait); 214 211 wake_up_interruptible(&tty->write_wait); 215 212 213 + cancel_work_sync(&n_hdlc->write_work); 214 + 216 215 n_hdlc_free_buf_list(&n_hdlc->rx_free_buf_list); 217 216 n_hdlc_free_buf_list(&n_hdlc->tx_free_buf_list); 218 217 n_hdlc_free_buf_list(&n_hdlc->rx_buf_list); ··· 246 241 return -ENFILE; 247 242 } 248 243 244 + INIT_WORK(&n_hdlc->write_work, n_hdlc_tty_write_work); 245 + n_hdlc->tty_for_write_work = tty; 249 246 tty->disc_data = n_hdlc; 250 247 tty->receive_room = 65536; 251 248 ··· 342 335 } /* end of n_hdlc_send_frames() */ 343 336 344 337 /** 338 + * n_hdlc_tty_write_work - Asynchronous callback for transmit wakeup 339 + * @work: pointer to work_struct 340 + * 341 + * Called when low level device driver can accept more send data. 342 + */ 343 + static void n_hdlc_tty_write_work(struct work_struct *work) 344 + { 345 + struct n_hdlc *n_hdlc = container_of(work, struct n_hdlc, write_work); 346 + struct tty_struct *tty = n_hdlc->tty_for_write_work; 347 + 348 + n_hdlc_send_frames(n_hdlc, tty); 349 + } /* end of n_hdlc_tty_write_work() */ 350 + 351 + /** 345 352 * n_hdlc_tty_wakeup - Callback for transmit wakeup 346 353 * @tty: pointer to associated tty instance data 347 354 * ··· 365 344 { 366 345 struct n_hdlc *n_hdlc = tty->disc_data; 367 346 368 - n_hdlc_send_frames(n_hdlc, tty); 347 + schedule_work(&n_hdlc->write_work); 369 348 } /* end of n_hdlc_tty_wakeup() */ 370 349 371 350 /**
-20
drivers/tty/serial/8250/8250_fintek.c
··· 290 290 } 291 291 } 292 292 293 - static void fintek_8250_goto_highspeed(struct uart_8250_port *uart, 294 - struct fintek_8250 *pdata) 295 - { 296 - sio_write_reg(pdata, LDN, pdata->index); 297 - 298 - switch (pdata->pid) { 299 - case CHIP_ID_F81966: 300 - case CHIP_ID_F81866: /* set uart clock for high speed serial mode */ 301 - sio_write_mask_reg(pdata, F81866_UART_CLK, 302 - F81866_UART_CLK_MASK, 303 - F81866_UART_CLK_14_769MHZ); 304 - 305 - uart->port.uartclk = 921600 * 16; 306 - break; 307 - default: /* leave clock speed untouched */ 308 - break; 309 - } 310 - } 311 - 312 293 static void fintek_8250_set_termios(struct uart_port *port, 313 294 struct ktermios *termios, 314 295 struct ktermios *old) ··· 411 430 412 431 fintek_8250_set_irq_mode(pdata, level_mode); 413 432 fintek_8250_set_max_fifo(pdata); 414 - fintek_8250_goto_highspeed(uart, pdata); 415 433 416 434 fintek_8250_exit_key(addr[i]); 417 435
+12
drivers/usb/cdns3/cdnsp-gadget.c
··· 1541 1541 { 1542 1542 struct cdnsp_device *pdev = gadget_to_cdnsp(gadget); 1543 1543 struct cdns *cdns = dev_get_drvdata(pdev->dev); 1544 + unsigned long flags; 1544 1545 1545 1546 trace_cdnsp_pullup(is_on); 1547 + 1548 + /* 1549 + * Disable events handling while controller is being 1550 + * enabled/disabled. 1551 + */ 1552 + disable_irq(cdns->dev_irq); 1553 + spin_lock_irqsave(&pdev->lock, flags); 1546 1554 1547 1555 if (!is_on) { 1548 1556 cdnsp_reset_device(pdev); ··· 1558 1550 } else { 1559 1551 cdns_set_vbus(cdns); 1560 1552 } 1553 + 1554 + spin_unlock_irqrestore(&pdev->lock, flags); 1555 + enable_irq(cdns->dev_irq); 1556 + 1561 1557 return 0; 1562 1558 } 1563 1559
+10 -1
drivers/usb/cdns3/cdnsp-ring.c
··· 1029 1029 return; 1030 1030 } 1031 1031 1032 + *status = 0; 1033 + 1032 1034 cdnsp_finish_td(pdev, td, event, pep, status); 1033 1035 } 1034 1036 ··· 1525 1523 spin_lock_irqsave(&pdev->lock, flags); 1526 1524 1527 1525 if (pdev->cdnsp_state & (CDNSP_STATE_HALTED | CDNSP_STATE_DYING)) { 1528 - cdnsp_died(pdev); 1526 + /* 1527 + * While removing or stopping driver there may still be deferred 1528 + * not handled interrupt which should not be treated as error. 1529 + * Driver should simply ignore it. 1530 + */ 1531 + if (pdev->gadget_driver) 1532 + cdnsp_died(pdev); 1533 + 1529 1534 spin_unlock_irqrestore(&pdev->lock, flags); 1530 1535 return IRQ_HANDLED; 1531 1536 }
+2 -2
drivers/usb/cdns3/cdnsp-trace.h
··· 57 57 __entry->first_prime_det = pep->stream_info.first_prime_det; 58 58 __entry->drbls_count = pep->stream_info.drbls_count; 59 59 ), 60 - TP_printk("%s: SID: %08x ep state: %x stream: enabled: %d num %d " 60 + TP_printk("%s: SID: %08x, ep state: %x, stream: enabled: %d num %d " 61 61 "tds %d, first prime: %d drbls %d", 62 - __get_str(name), __entry->state, __entry->stream_id, 62 + __get_str(name), __entry->stream_id, __entry->state, 63 63 __entry->enabled, __entry->num_streams, __entry->td_count, 64 64 __entry->first_prime_det, __entry->drbls_count) 65 65 );
+3
drivers/usb/core/quirks.c
··· 434 434 { USB_DEVICE(0x1532, 0x0116), .driver_info = 435 435 USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL }, 436 436 437 + /* Lenovo USB-C to Ethernet Adapter RTL8153-04 */ 438 + { USB_DEVICE(0x17ef, 0x720c), .driver_info = USB_QUIRK_NO_LPM }, 439 + 437 440 /* Lenovo Powered USB-C Travel Hub (4X90S92381, RTL8153 GigE) */ 438 441 { USB_DEVICE(0x17ef, 0x721e), .driver_info = USB_QUIRK_NO_LPM }, 439 442
+3
drivers/usb/dwc2/platform.c
··· 555 555 ggpio |= GGPIO_STM32_OTG_GCCFG_IDEN; 556 556 ggpio |= GGPIO_STM32_OTG_GCCFG_VBDEN; 557 557 dwc2_writel(hsotg, ggpio, GGPIO); 558 + 559 + /* ID/VBUS detection startup time */ 560 + usleep_range(5000, 7000); 558 561 } 559 562 560 563 retval = dwc2_drd_init(hsotg);
+11 -4
drivers/usb/early/xhci-dbc.c
··· 14 14 #include <linux/pci_ids.h> 15 15 #include <linux/memblock.h> 16 16 #include <linux/io.h> 17 - #include <linux/iopoll.h> 18 17 #include <asm/pci-direct.h> 19 18 #include <asm/fixmap.h> 20 19 #include <linux/bcd.h> ··· 135 136 { 136 137 u32 result; 137 138 138 - return readl_poll_timeout_atomic(ptr, result, 139 - ((result & mask) == done), 140 - delay, wait); 139 + /* Can not use readl_poll_timeout_atomic() for early boot things */ 140 + do { 141 + result = readl(ptr); 142 + result &= mask; 143 + if (result == done) 144 + return 0; 145 + udelay(delay); 146 + wait -= delay; 147 + } while (wait > 0); 148 + 149 + return -ETIMEDOUT; 141 150 } 142 151 143 152 static void __init xdbc_bios_handoff(void)
+3 -3
drivers/usb/gadget/composite.c
··· 1693 1693 u8 endp; 1694 1694 1695 1695 if (w_length > USB_COMP_EP0_BUFSIZ) { 1696 - if (ctrl->bRequestType == USB_DIR_OUT) { 1697 - goto done; 1698 - } else { 1696 + if (ctrl->bRequestType & USB_DIR_IN) { 1699 1697 /* Cast away the const, we are going to overwrite on purpose. */ 1700 1698 __le16 *temp = (__le16 *)&ctrl->wLength; 1701 1699 1702 1700 *temp = cpu_to_le16(USB_COMP_EP0_BUFSIZ); 1703 1701 w_length = USB_COMP_EP0_BUFSIZ; 1702 + } else { 1703 + goto done; 1704 1704 } 1705 1705 } 1706 1706
+6 -10
drivers/usb/gadget/function/u_ether.c
··· 17 17 #include <linux/etherdevice.h> 18 18 #include <linux/ethtool.h> 19 19 #include <linux/if_vlan.h> 20 + #include <linux/etherdevice.h> 20 21 21 22 #include "u_ether.h" 22 23 ··· 864 863 { 865 864 struct eth_dev *dev; 866 865 struct usb_gadget *g; 867 - struct sockaddr sa; 868 866 int status; 869 867 870 868 if (!net->dev.parent) 871 869 return -EINVAL; 872 870 dev = netdev_priv(net); 873 871 g = dev->gadget; 872 + 873 + net->addr_assign_type = NET_ADDR_RANDOM; 874 + eth_hw_addr_set(net, dev->dev_mac); 875 + 874 876 status = register_netdev(net); 875 877 if (status < 0) { 876 878 dev_dbg(&g->dev, "register_netdev failed, %d\n", status); 877 879 return status; 878 880 } else { 879 881 INFO(dev, "HOST MAC %pM\n", dev->host_mac); 882 + INFO(dev, "MAC %pM\n", dev->dev_mac); 880 883 881 884 /* two kinds of host-initiated state changes: 882 885 * - iff DATA transfer is active, carrier is "on" ··· 888 883 */ 889 884 netif_carrier_off(net); 890 885 } 891 - sa.sa_family = net->type; 892 - memcpy(sa.sa_data, dev->dev_mac, ETH_ALEN); 893 - rtnl_lock(); 894 - status = dev_set_mac_address(net, &sa, NULL); 895 - rtnl_unlock(); 896 - if (status) 897 - pr_warn("cannot set self ethernet address: %d\n", status); 898 - else 899 - INFO(dev, "MAC %pM\n", dev->dev_mac); 900 886 901 887 return status; 902 888 }
+3 -3
drivers/usb/gadget/legacy/dbgp.c
··· 346 346 u16 len = 0; 347 347 348 348 if (length > DBGP_REQ_LEN) { 349 - if (ctrl->bRequestType == USB_DIR_OUT) { 350 - return err; 351 - } else { 349 + if (ctrl->bRequestType & USB_DIR_IN) { 352 350 /* Cast away the const, we are going to overwrite on purpose. */ 353 351 __le16 *temp = (__le16 *)&ctrl->wLength; 354 352 355 353 *temp = cpu_to_le16(DBGP_REQ_LEN); 356 354 length = DBGP_REQ_LEN; 355 + } else { 356 + return err; 357 357 } 358 358 } 359 359
+3 -3
drivers/usb/gadget/legacy/inode.c
··· 1334 1334 u16 w_length = le16_to_cpu(ctrl->wLength); 1335 1335 1336 1336 if (w_length > RBUF_SIZE) { 1337 - if (ctrl->bRequestType == USB_DIR_OUT) { 1338 - return value; 1339 - } else { 1337 + if (ctrl->bRequestType & USB_DIR_IN) { 1340 1338 /* Cast away the const, we are going to overwrite on purpose. */ 1341 1339 __le16 *temp = (__le16 *)&ctrl->wLength; 1342 1340 1343 1341 *temp = cpu_to_le16(RBUF_SIZE); 1344 1342 w_length = RBUF_SIZE; 1343 + } else { 1344 + return value; 1345 1345 } 1346 1346 } 1347 1347
+1 -1
drivers/usb/host/xhci-mtk-sch.c
··· 781 781 782 782 ret = xhci_check_bandwidth(hcd, udev); 783 783 if (!ret) 784 - INIT_LIST_HEAD(&mtk->bw_ep_chk_list); 784 + list_del_init(&mtk->bw_ep_chk_list); 785 785 786 786 return ret; 787 787 }
+5 -1
drivers/usb/host/xhci-pci.c
··· 71 71 #define PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_4 0x161e 72 72 #define PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_5 0x15d6 73 73 #define PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_6 0x15d7 74 + #define PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_7 0x161c 75 + #define PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_8 0x161f 74 76 75 77 #define PCI_DEVICE_ID_ASMEDIA_1042_XHCI 0x1042 76 78 #define PCI_DEVICE_ID_ASMEDIA_1042A_XHCI 0x1142 ··· 332 330 pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_3 || 333 331 pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_4 || 334 332 pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_5 || 335 - pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_6)) 333 + pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_6 || 334 + pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_7 || 335 + pdev->device == PCI_DEVICE_ID_AMD_YELLOW_CARP_XHCI_8)) 336 336 xhci->quirks |= XHCI_DEFAULT_PM_RUNTIME_ALLOW; 337 337 338 338 if (xhci->quirks & XHCI_RESET_ON_RESUME)
+4 -2
drivers/usb/serial/cp210x.c
··· 1635 1635 1636 1636 /* 2 banks of GPIO - One for the pins taken from each serial port */ 1637 1637 if (intf_num == 0) { 1638 + priv->gc.ngpio = 2; 1639 + 1638 1640 if (mode.eci == CP210X_PIN_MODE_MODEM) { 1639 1641 /* mark all GPIOs of this interface as reserved */ 1640 1642 priv->gpio_altfunc = 0xff; ··· 1647 1645 priv->gpio_pushpull = (u8)((le16_to_cpu(config.gpio_mode) & 1648 1646 CP210X_ECI_GPIO_MODE_MASK) >> 1649 1647 CP210X_ECI_GPIO_MODE_OFFSET); 1650 - priv->gc.ngpio = 2; 1651 1648 } else if (intf_num == 1) { 1649 + priv->gc.ngpio = 3; 1650 + 1652 1651 if (mode.sci == CP210X_PIN_MODE_MODEM) { 1653 1652 /* mark all GPIOs of this interface as reserved */ 1654 1653 priv->gpio_altfunc = 0xff; ··· 1660 1657 priv->gpio_pushpull = (u8)((le16_to_cpu(config.gpio_mode) & 1661 1658 CP210X_SCI_GPIO_MODE_MASK) >> 1662 1659 CP210X_SCI_GPIO_MODE_OFFSET); 1663 - priv->gc.ngpio = 3; 1664 1660 } else { 1665 1661 return -ENODEV; 1666 1662 }
+8
drivers/usb/serial/option.c
··· 1219 1219 .driver_info = NCTRL(2) | RSVD(3) }, 1220 1220 { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1063, 0xff), /* Telit LN920 (ECM) */ 1221 1221 .driver_info = NCTRL(0) | RSVD(1) }, 1222 + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1070, 0xff), /* Telit FN990 (rmnet) */ 1223 + .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) }, 1224 + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1071, 0xff), /* Telit FN990 (MBIM) */ 1225 + .driver_info = NCTRL(0) | RSVD(1) }, 1226 + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1072, 0xff), /* Telit FN990 (RNDIS) */ 1227 + .driver_info = NCTRL(2) | RSVD(3) }, 1228 + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1073, 0xff), /* Telit FN990 (ECM) */ 1229 + .driver_info = NCTRL(0) | RSVD(1) }, 1222 1230 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910), 1223 1231 .driver_info = NCTRL(0) | RSVD(1) | RSVD(3) }, 1224 1232 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910_DUAL_MODEM),
+13 -5
drivers/usb/typec/tcpm/tcpm.c
··· 324 324 325 325 bool attached; 326 326 bool connected; 327 + bool registered; 327 328 bool pd_supported; 328 329 enum typec_port_type port_type; 329 330 ··· 6292 6291 { 6293 6292 struct tcpm_port *port = container_of(timer, struct tcpm_port, state_machine_timer); 6294 6293 6295 - kthread_queue_work(port->wq, &port->state_machine); 6294 + if (port->registered) 6295 + kthread_queue_work(port->wq, &port->state_machine); 6296 6296 return HRTIMER_NORESTART; 6297 6297 } 6298 6298 ··· 6301 6299 { 6302 6300 struct tcpm_port *port = container_of(timer, struct tcpm_port, vdm_state_machine_timer); 6303 6301 6304 - kthread_queue_work(port->wq, &port->vdm_state_machine); 6302 + if (port->registered) 6303 + kthread_queue_work(port->wq, &port->vdm_state_machine); 6305 6304 return HRTIMER_NORESTART; 6306 6305 } 6307 6306 ··· 6310 6307 { 6311 6308 struct tcpm_port *port = container_of(timer, struct tcpm_port, enable_frs_timer); 6312 6309 6313 - kthread_queue_work(port->wq, &port->enable_frs); 6310 + if (port->registered) 6311 + kthread_queue_work(port->wq, &port->enable_frs); 6314 6312 return HRTIMER_NORESTART; 6315 6313 } 6316 6314 ··· 6319 6315 { 6320 6316 struct tcpm_port *port = container_of(timer, struct tcpm_port, send_discover_timer); 6321 6317 6322 - kthread_queue_work(port->wq, &port->send_discover_work); 6318 + if (port->registered) 6319 + kthread_queue_work(port->wq, &port->send_discover_work); 6323 6320 return HRTIMER_NORESTART; 6324 6321 } 6325 6322 ··· 6408 6403 typec_port_register_altmodes(port->typec_port, 6409 6404 &tcpm_altmode_ops, port, 6410 6405 port->port_altmode, ALTMODE_DISCOVERY_MAX); 6406 + port->registered = true; 6411 6407 6412 6408 mutex_lock(&port->lock); 6413 6409 tcpm_init(port); ··· 6430 6424 { 6431 6425 int i; 6432 6426 6427 + port->registered = false; 6428 + kthread_destroy_worker(port->wq); 6429 + 6433 6430 hrtimer_cancel(&port->send_discover_timer); 6434 6431 hrtimer_cancel(&port->enable_frs_timer); 6435 6432 hrtimer_cancel(&port->vdm_state_machine_timer); ··· 6444 6435 typec_unregister_port(port->typec_port); 6445 6436 usb_role_switch_put(port->role_sw); 6446 6437 tcpm_debugfs_exit(port); 6447 - kthread_destroy_worker(port->wq); 6448 6438 } 6449 6439 EXPORT_SYMBOL_GPL(tcpm_unregister_port); 6450 6440
+2 -1
drivers/vdpa/vdpa.c
··· 404 404 goto msg_err; 405 405 406 406 while (mdev->id_table[i].device) { 407 - supported_classes |= BIT(mdev->id_table[i].device); 407 + if (mdev->id_table[i].device <= 63) 408 + supported_classes |= BIT_ULL(mdev->id_table[i].device); 408 409 i++; 409 410 } 410 411
+4 -2
drivers/vdpa/vdpa_user/vduse_dev.c
··· 655 655 { 656 656 struct vduse_dev *dev = vdpa_to_vduse(vdpa); 657 657 658 - if (len > dev->config_size - offset) 658 + if (offset > dev->config_size || 659 + len > dev->config_size - offset) 659 660 return; 660 661 661 662 memcpy(buf, dev->config + offset, len); ··· 976 975 break; 977 976 978 977 ret = -EINVAL; 979 - if (config.length == 0 || 978 + if (config.offset > dev->config_size || 979 + config.length == 0 || 980 980 config.length > dev->config_size - config.offset) 981 981 break; 982 982
+1 -1
drivers/vhost/vdpa.c
··· 197 197 struct vdpa_device *vdpa = v->vdpa; 198 198 long size = vdpa->config->get_config_size(vdpa); 199 199 200 - if (c->len == 0) 200 + if (c->len == 0 || c->off > size) 201 201 return -EINVAL; 202 202 203 203 if (c->len > size - c->off)
+1 -1
drivers/virtio/virtio_ring.c
··· 268 268 size_t max_segment_size = SIZE_MAX; 269 269 270 270 if (vring_use_dma_api(vdev)) 271 - max_segment_size = dma_max_mapping_size(&vdev->dev); 271 + max_segment_size = dma_max_mapping_size(vdev->dev.parent); 272 272 273 273 return max_segment_size; 274 274 }
+3 -2
fs/afs/file.c
··· 514 514 if (atomic_inc_return(&vnode->cb_nr_mmap) == 1) { 515 515 down_write(&vnode->volume->cell->fs_open_mmaps_lock); 516 516 517 - list_add_tail(&vnode->cb_mmap_link, 518 - &vnode->volume->cell->fs_open_mmaps); 517 + if (list_empty(&vnode->cb_mmap_link)) 518 + list_add_tail(&vnode->cb_mmap_link, 519 + &vnode->volume->cell->fs_open_mmaps); 519 520 520 521 up_write(&vnode->volume->cell->fs_open_mmaps_lock); 521 522 }
+1
fs/afs/super.c
··· 667 667 INIT_LIST_HEAD(&vnode->pending_locks); 668 668 INIT_LIST_HEAD(&vnode->granted_locks); 669 669 INIT_DELAYED_WORK(&vnode->lock_work, afs_lock_work); 670 + INIT_LIST_HEAD(&vnode->cb_mmap_link); 670 671 seqlock_init(&vnode->cb_lock); 671 672 } 672 673
+9 -8
fs/btrfs/ctree.c
··· 463 463 BUG_ON(ret < 0); 464 464 rcu_assign_pointer(root->node, cow); 465 465 466 - btrfs_free_tree_block(trans, root, buf, parent_start, 467 - last_ref); 466 + btrfs_free_tree_block(trans, btrfs_root_id(root), buf, 467 + parent_start, last_ref); 468 468 free_extent_buffer(buf); 469 469 add_root_to_dirty_list(root); 470 470 } else { ··· 485 485 return ret; 486 486 } 487 487 } 488 - btrfs_free_tree_block(trans, root, buf, parent_start, 489 - last_ref); 488 + btrfs_free_tree_block(trans, btrfs_root_id(root), buf, 489 + parent_start, last_ref); 490 490 } 491 491 if (unlock_orig) 492 492 btrfs_tree_unlock(buf); ··· 927 927 free_extent_buffer(mid); 928 928 929 929 root_sub_used(root, mid->len); 930 - btrfs_free_tree_block(trans, root, mid, 0, 1); 930 + btrfs_free_tree_block(trans, btrfs_root_id(root), mid, 0, 1); 931 931 /* once for the root ptr */ 932 932 free_extent_buffer_stale(mid); 933 933 return 0; ··· 986 986 btrfs_tree_unlock(right); 987 987 del_ptr(root, path, level + 1, pslot + 1); 988 988 root_sub_used(root, right->len); 989 - btrfs_free_tree_block(trans, root, right, 0, 1); 989 + btrfs_free_tree_block(trans, btrfs_root_id(root), right, 990 + 0, 1); 990 991 free_extent_buffer_stale(right); 991 992 right = NULL; 992 993 } else { ··· 1032 1031 btrfs_tree_unlock(mid); 1033 1032 del_ptr(root, path, level + 1, pslot); 1034 1033 root_sub_used(root, mid->len); 1035 - btrfs_free_tree_block(trans, root, mid, 0, 1); 1034 + btrfs_free_tree_block(trans, btrfs_root_id(root), mid, 0, 1); 1036 1035 free_extent_buffer_stale(mid); 1037 1036 mid = NULL; 1038 1037 } else { ··· 4033 4032 root_sub_used(root, leaf->len); 4034 4033 4035 4034 atomic_inc(&leaf->refs); 4036 - btrfs_free_tree_block(trans, root, leaf, 0, 1); 4035 + btrfs_free_tree_block(trans, btrfs_root_id(root), leaf, 0, 1); 4037 4036 free_extent_buffer_stale(leaf); 4038 4037 } 4039 4038 /*
+6 -1
fs/btrfs/ctree.h
··· 2257 2257 return (root->root_item.flags & cpu_to_le64(BTRFS_ROOT_SUBVOL_DEAD)) != 0; 2258 2258 } 2259 2259 2260 + static inline u64 btrfs_root_id(const struct btrfs_root *root) 2261 + { 2262 + return root->root_key.objectid; 2263 + } 2264 + 2260 2265 /* struct btrfs_root_backup */ 2261 2266 BTRFS_SETGET_STACK_FUNCS(backup_tree_root, struct btrfs_root_backup, 2262 2267 tree_root, 64); ··· 2724 2719 u64 empty_size, 2725 2720 enum btrfs_lock_nesting nest); 2726 2721 void btrfs_free_tree_block(struct btrfs_trans_handle *trans, 2727 - struct btrfs_root *root, 2722 + u64 root_id, 2728 2723 struct extent_buffer *buf, 2729 2724 u64 parent, int last_ref); 2730 2725 int btrfs_alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
+8
fs/btrfs/disk-io.c
··· 1732 1732 } 1733 1733 return root; 1734 1734 fail: 1735 + /* 1736 + * If our caller provided us an anonymous device, then it's his 1737 + * responsability to free it in case we fail. So we have to set our 1738 + * root's anon_dev to 0 to avoid a double free, once by btrfs_put_root() 1739 + * and once again by our caller. 1740 + */ 1741 + if (anon_dev) 1742 + root->anon_dev = 0; 1735 1743 btrfs_put_root(root); 1736 1744 return ERR_PTR(ret); 1737 1745 }
+7 -6
fs/btrfs/extent-tree.c
··· 3275 3275 } 3276 3276 3277 3277 void btrfs_free_tree_block(struct btrfs_trans_handle *trans, 3278 - struct btrfs_root *root, 3278 + u64 root_id, 3279 3279 struct extent_buffer *buf, 3280 3280 u64 parent, int last_ref) 3281 3281 { 3282 - struct btrfs_fs_info *fs_info = root->fs_info; 3282 + struct btrfs_fs_info *fs_info = trans->fs_info; 3283 3283 struct btrfs_ref generic_ref = { 0 }; 3284 3284 int ret; 3285 3285 3286 3286 btrfs_init_generic_ref(&generic_ref, BTRFS_DROP_DELAYED_REF, 3287 3287 buf->start, buf->len, parent); 3288 3288 btrfs_init_tree_ref(&generic_ref, btrfs_header_level(buf), 3289 - root->root_key.objectid, 0, false); 3289 + root_id, 0, false); 3290 3290 3291 - if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) { 3291 + if (root_id != BTRFS_TREE_LOG_OBJECTID) { 3292 3292 btrfs_ref_tree_mod(fs_info, &generic_ref); 3293 3293 ret = btrfs_add_delayed_tree_ref(trans, &generic_ref, NULL); 3294 3294 BUG_ON(ret); /* -ENOMEM */ ··· 3298 3298 struct btrfs_block_group *cache; 3299 3299 bool must_pin = false; 3300 3300 3301 - if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) { 3301 + if (root_id != BTRFS_TREE_LOG_OBJECTID) { 3302 3302 ret = check_ref_cleanup(trans, buf->start); 3303 3303 if (!ret) { 3304 3304 btrfs_redirty_list_add(trans->transaction, buf); ··· 5472 5472 goto owner_mismatch; 5473 5473 } 5474 5474 5475 - btrfs_free_tree_block(trans, root, eb, parent, wc->refs[level] == 1); 5475 + btrfs_free_tree_block(trans, btrfs_root_id(root), eb, parent, 5476 + wc->refs[level] == 1); 5476 5477 out: 5477 5478 wc->refs[level] = 0; 5478 5479 wc->flags[level] = 0;
+8
fs/btrfs/extent_io.c
··· 6611 6611 if (test_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags)) 6612 6612 return 0; 6613 6613 6614 + /* 6615 + * We could have had EXTENT_BUFFER_UPTODATE cleared by the write 6616 + * operation, which could potentially still be in flight. In this case 6617 + * we simply want to return an error. 6618 + */ 6619 + if (unlikely(test_bit(EXTENT_BUFFER_WRITE_ERR, &eb->bflags))) 6620 + return -EIO; 6621 + 6614 6622 if (eb->fs_info->sectorsize < PAGE_SIZE) 6615 6623 return read_extent_buffer_subpage(eb, wait, mirror_num); 6616 6624
+2 -2
fs/btrfs/free-space-tree.c
··· 1256 1256 btrfs_tree_lock(free_space_root->node); 1257 1257 btrfs_clean_tree_block(free_space_root->node); 1258 1258 btrfs_tree_unlock(free_space_root->node); 1259 - btrfs_free_tree_block(trans, free_space_root, free_space_root->node, 1260 - 0, 1); 1259 + btrfs_free_tree_block(trans, btrfs_root_id(free_space_root), 1260 + free_space_root->node, 0, 1); 1261 1261 1262 1262 btrfs_put_root(free_space_root); 1263 1263
+6 -4
fs/btrfs/ioctl.c
··· 617 617 * Since we don't abort the transaction in this case, free the 618 618 * tree block so that we don't leak space and leave the 619 619 * filesystem in an inconsistent state (an extent item in the 620 - * extent tree without backreferences). Also no need to have 621 - * the tree block locked since it is not in any tree at this 622 - * point, so no other task can find it and use it. 620 + * extent tree with a backreference for a root that does not 621 + * exists). 623 622 */ 624 - btrfs_free_tree_block(trans, root, leaf, 0, 1); 623 + btrfs_tree_lock(leaf); 624 + btrfs_clean_tree_block(leaf); 625 + btrfs_tree_unlock(leaf); 626 + btrfs_free_tree_block(trans, objectid, leaf, 0, 1); 625 627 free_extent_buffer(leaf); 626 628 goto fail; 627 629 }
+2 -1
fs/btrfs/qgroup.c
··· 1219 1219 btrfs_tree_lock(quota_root->node); 1220 1220 btrfs_clean_tree_block(quota_root->node); 1221 1221 btrfs_tree_unlock(quota_root->node); 1222 - btrfs_free_tree_block(trans, quota_root, quota_root->node, 0, 1); 1222 + btrfs_free_tree_block(trans, btrfs_root_id(quota_root), 1223 + quota_root->node, 0, 1); 1223 1224 1224 1225 btrfs_put_root(quota_root); 1225 1226
+2
fs/btrfs/tree-log.c
··· 1181 1181 parent_objectid, victim_name, 1182 1182 victim_name_len); 1183 1183 if (ret < 0) { 1184 + kfree(victim_name); 1184 1185 return ret; 1185 1186 } else if (!ret) { 1186 1187 ret = -ENOENT; ··· 3978 3977 goto done; 3979 3978 } 3980 3979 if (btrfs_header_generation(path->nodes[0]) != trans->transid) { 3980 + ctx->last_dir_item_offset = min_key.offset; 3981 3981 ret = overwrite_item(trans, log, dst_path, 3982 3982 path->nodes[0], path->slots[0], 3983 3983 &min_key);
+4 -2
fs/btrfs/volumes.c
··· 1370 1370 1371 1371 bytenr_orig = btrfs_sb_offset(0); 1372 1372 ret = btrfs_sb_log_location_bdev(bdev, 0, READ, &bytenr); 1373 - if (ret) 1374 - return ERR_PTR(ret); 1373 + if (ret) { 1374 + device = ERR_PTR(ret); 1375 + goto error_bdev_put; 1376 + } 1375 1377 1376 1378 disk_super = btrfs_read_disk_super(bdev, bytenr, bytenr_orig); 1377 1379 if (IS_ERR(disk_super)) {
+8 -8
fs/ceph/caps.c
··· 4350 4350 { 4351 4351 struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(ci->vfs_inode.i_sb); 4352 4352 int bits = (fmode << 1) | 1; 4353 - bool is_opened = false; 4353 + bool already_opened = false; 4354 4354 int i; 4355 4355 4356 4356 if (count == 1) ··· 4358 4358 4359 4359 spin_lock(&ci->i_ceph_lock); 4360 4360 for (i = 0; i < CEPH_FILE_MODE_BITS; i++) { 4361 - if (bits & (1 << i)) 4362 - ci->i_nr_by_mode[i] += count; 4363 - 4364 4361 /* 4365 - * If any of the mode ref is larger than 1, 4362 + * If any of the mode ref is larger than 0, 4366 4363 * that means it has been already opened by 4367 4364 * others. Just skip checking the PIN ref. 4368 4365 */ 4369 - if (i && ci->i_nr_by_mode[i] > 1) 4370 - is_opened = true; 4366 + if (i && ci->i_nr_by_mode[i]) 4367 + already_opened = true; 4368 + 4369 + if (bits & (1 << i)) 4370 + ci->i_nr_by_mode[i] += count; 4371 4371 } 4372 4372 4373 - if (!is_opened) 4373 + if (!already_opened) 4374 4374 percpu_counter_inc(&mdsc->metric.opened_inodes); 4375 4375 spin_unlock(&ci->i_ceph_lock); 4376 4376 }
+16 -4
fs/ceph/file.c
··· 605 605 in.cap.realm = cpu_to_le64(ci->i_snap_realm->ino); 606 606 in.cap.flags = CEPH_CAP_FLAG_AUTH; 607 607 in.ctime = in.mtime = in.atime = iinfo.btime; 608 - in.mode = cpu_to_le32((u32)mode); 609 608 in.truncate_seq = cpu_to_le32(1); 610 609 in.truncate_size = cpu_to_le64(-1ULL); 611 610 in.xattr_version = cpu_to_le64(1); 612 611 in.uid = cpu_to_le32(from_kuid(&init_user_ns, current_fsuid())); 613 - in.gid = cpu_to_le32(from_kgid(&init_user_ns, dir->i_mode & S_ISGID ? 614 - dir->i_gid : current_fsgid())); 612 + if (dir->i_mode & S_ISGID) { 613 + in.gid = cpu_to_le32(from_kgid(&init_user_ns, dir->i_gid)); 614 + 615 + /* Directories always inherit the setgid bit. */ 616 + if (S_ISDIR(mode)) 617 + mode |= S_ISGID; 618 + else if ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP) && 619 + !in_group_p(dir->i_gid) && 620 + !capable_wrt_inode_uidgid(&init_user_ns, dir, CAP_FSETID)) 621 + mode &= ~S_ISGID; 622 + } else { 623 + in.gid = cpu_to_le32(from_kgid(&init_user_ns, current_fsgid())); 624 + } 625 + in.mode = cpu_to_le32((u32)mode); 626 + 615 627 in.nlink = cpu_to_le32(1); 616 628 in.max_size = cpu_to_le64(lo->stripe_unit); 617 629 ··· 859 847 ssize_t ret; 860 848 u64 off = iocb->ki_pos; 861 849 u64 len = iov_iter_count(to); 862 - u64 i_size; 850 + u64 i_size = i_size_read(inode); 863 851 864 852 dout("sync_read on file %p %llu~%u %s\n", file, off, (unsigned)len, 865 853 (file->f_flags & O_DIRECT) ? "O_DIRECT" : "");
+1 -2
fs/ceph/mds_client.c
··· 3683 3683 struct ceph_pagelist *pagelist = recon_state->pagelist; 3684 3684 struct dentry *dentry; 3685 3685 char *path; 3686 - int pathlen, err; 3686 + int pathlen = 0, err; 3687 3687 u64 pathbase; 3688 3688 u64 snap_follows; 3689 3689 ··· 3703 3703 } 3704 3704 } else { 3705 3705 path = NULL; 3706 - pathlen = 0; 3707 3706 pathbase = 0; 3708 3707 } 3709 3708
+7
fs/cifs/connect.c
··· 3064 3064 (cifs_sb->ctx->rsize > server->ops->negotiate_rsize(tcon, ctx))) 3065 3065 cifs_sb->ctx->rsize = server->ops->negotiate_rsize(tcon, ctx); 3066 3066 3067 + /* 3068 + * The cookie is initialized from volume info returned above. 3069 + * Inside cifs_fscache_get_super_cookie it checks 3070 + * that we do not get super cookie twice. 3071 + */ 3072 + cifs_fscache_get_super_cookie(tcon); 3073 + 3067 3074 out: 3068 3075 mnt_ctx->server = server; 3069 3076 mnt_ctx->ses = ses;
+37 -1
fs/cifs/fs_context.c
··· 435 435 } 436 436 437 437 /* 438 + * Remove duplicate path delimiters. Windows is supposed to do that 439 + * but there are some bugs that prevent rename from working if there are 440 + * multiple delimiters. 441 + * 442 + * Returns a sanitized duplicate of @path. The caller is responsible for 443 + * cleaning up the original. 444 + */ 445 + #define IS_DELIM(c) ((c) == '/' || (c) == '\\') 446 + static char *sanitize_path(char *path) 447 + { 448 + char *cursor1 = path, *cursor2 = path; 449 + 450 + /* skip all prepended delimiters */ 451 + while (IS_DELIM(*cursor1)) 452 + cursor1++; 453 + 454 + /* copy the first letter */ 455 + *cursor2 = *cursor1; 456 + 457 + /* copy the remainder... */ 458 + while (*(cursor1++)) { 459 + /* ... skipping all duplicated delimiters */ 460 + if (IS_DELIM(*cursor1) && IS_DELIM(*cursor2)) 461 + continue; 462 + *(++cursor2) = *cursor1; 463 + } 464 + 465 + /* if the last character is a delimiter, skip it */ 466 + if (IS_DELIM(*(cursor2 - 1))) 467 + cursor2--; 468 + 469 + *(cursor2) = '\0'; 470 + return kstrdup(path, GFP_KERNEL); 471 + } 472 + 473 + /* 438 474 * Parse a devname into substrings and populate the ctx->UNC and ctx->prepath 439 475 * fields with the result. Returns 0 on success and an error otherwise 440 476 * (e.g. ENOMEM or EINVAL) ··· 529 493 if (!*pos) 530 494 return 0; 531 495 532 - ctx->prepath = kstrdup(pos, GFP_KERNEL); 496 + ctx->prepath = sanitize_path(pos); 533 497 if (!ctx->prepath) 534 498 return -ENOMEM; 535 499
-13
fs/cifs/inode.c
··· 1356 1356 goto out; 1357 1357 } 1358 1358 1359 - #ifdef CONFIG_CIFS_FSCACHE 1360 - /* populate tcon->resource_id */ 1361 - tcon->resource_id = CIFS_I(inode)->uniqueid; 1362 - #endif 1363 - 1364 1359 if (rc && tcon->pipe) { 1365 1360 cifs_dbg(FYI, "ipc connection - fake read inode\n"); 1366 1361 spin_lock(&inode->i_lock); ··· 1370 1375 iget_failed(inode); 1371 1376 inode = ERR_PTR(rc); 1372 1377 } 1373 - 1374 - /* 1375 - * The cookie is initialized from volume info returned above. 1376 - * Inside cifs_fscache_get_super_cookie it checks 1377 - * that we do not get super cookie twice. 1378 - */ 1379 - cifs_fscache_get_super_cookie(tcon); 1380 - 1381 1378 out: 1382 1379 kfree(path); 1383 1380 free_xid(xid);
+56 -16
fs/file.c
··· 841 841 spin_unlock(&files->file_lock); 842 842 } 843 843 844 + static inline struct file *__fget_files_rcu(struct files_struct *files, 845 + unsigned int fd, fmode_t mask, unsigned int refs) 846 + { 847 + for (;;) { 848 + struct file *file; 849 + struct fdtable *fdt = rcu_dereference_raw(files->fdt); 850 + struct file __rcu **fdentry; 851 + 852 + if (unlikely(fd >= fdt->max_fds)) 853 + return NULL; 854 + 855 + fdentry = fdt->fd + array_index_nospec(fd, fdt->max_fds); 856 + file = rcu_dereference_raw(*fdentry); 857 + if (unlikely(!file)) 858 + return NULL; 859 + 860 + if (unlikely(file->f_mode & mask)) 861 + return NULL; 862 + 863 + /* 864 + * Ok, we have a file pointer. However, because we do 865 + * this all locklessly under RCU, we may be racing with 866 + * that file being closed. 867 + * 868 + * Such a race can take two forms: 869 + * 870 + * (a) the file ref already went down to zero, 871 + * and get_file_rcu_many() fails. Just try 872 + * again: 873 + */ 874 + if (unlikely(!get_file_rcu_many(file, refs))) 875 + continue; 876 + 877 + /* 878 + * (b) the file table entry has changed under us. 879 + * Note that we don't need to re-check the 'fdt->fd' 880 + * pointer having changed, because it always goes 881 + * hand-in-hand with 'fdt'. 882 + * 883 + * If so, we need to put our refs and try again. 884 + */ 885 + if (unlikely(rcu_dereference_raw(files->fdt) != fdt) || 886 + unlikely(rcu_dereference_raw(*fdentry) != file)) { 887 + fput_many(file, refs); 888 + continue; 889 + } 890 + 891 + /* 892 + * Ok, we have a ref to the file, and checked that it 893 + * still exists. 894 + */ 895 + return file; 896 + } 897 + } 898 + 844 899 static struct file *__fget_files(struct files_struct *files, unsigned int fd, 845 900 fmode_t mask, unsigned int refs) 846 901 { 847 902 struct file *file; 848 903 849 904 rcu_read_lock(); 850 - loop: 851 - file = files_lookup_fd_rcu(files, fd); 852 - if (file) { 853 - /* File object ref couldn't be taken. 854 - * dup2() atomicity guarantee is the reason 855 - * we loop to catch the new file (or NULL pointer) 856 - */ 857 - if (file->f_mode & mask) 858 - file = NULL; 859 - else if (!get_file_rcu_many(file, refs)) 860 - goto loop; 861 - else if (files_lookup_fd_raw(files, fd) != file) { 862 - fput_many(file, refs); 863 - goto loop; 864 - } 865 - } 905 + file = __fget_files_rcu(files, fd, mask, refs); 866 906 rcu_read_unlock(); 867 907 868 908 return file;
+2
fs/io-wq.c
··· 395 395 if (atomic_dec_and_test(&acct->nr_running) && io_acct_run_queue(acct)) { 396 396 atomic_inc(&acct->nr_running); 397 397 atomic_inc(&wqe->wq->worker_refs); 398 + raw_spin_unlock(&wqe->lock); 398 399 io_queue_worker_create(worker, acct, create_worker_cb); 400 + raw_spin_lock(&wqe->lock); 399 401 } 400 402 } 401 403
+1
fs/zonefs/super.c
··· 1787 1787 MODULE_AUTHOR("Damien Le Moal"); 1788 1788 MODULE_DESCRIPTION("Zone file system for zoned block devices"); 1789 1789 MODULE_LICENSE("GPL"); 1790 + MODULE_ALIAS_FS("zonefs"); 1790 1791 module_init(zonefs_init); 1791 1792 module_exit(zonefs_exit);
+10 -8
include/uapi/linux/mptcp.h
··· 136 136 * MPTCP_EVENT_REMOVED: token, rem_id 137 137 * An address has been lost by the peer. 138 138 * 139 - * MPTCP_EVENT_SUB_ESTABLISHED: token, family, saddr4 | saddr6, 140 - * daddr4 | daddr6, sport, dport, backup, 141 - * if_idx [, error] 139 + * MPTCP_EVENT_SUB_ESTABLISHED: token, family, loc_id, rem_id, 140 + * saddr4 | saddr6, daddr4 | daddr6, sport, 141 + * dport, backup, if_idx [, error] 142 142 * A new subflow has been established. 'error' should not be set. 143 143 * 144 - * MPTCP_EVENT_SUB_CLOSED: token, family, saddr4 | saddr6, daddr4 | daddr6, 145 - * sport, dport, backup, if_idx [, error] 144 + * MPTCP_EVENT_SUB_CLOSED: token, family, loc_id, rem_id, saddr4 | saddr6, 145 + * daddr4 | daddr6, sport, dport, backup, if_idx 146 + * [, error] 146 147 * A subflow has been closed. An error (copy of sk_err) could be set if an 147 148 * error has been detected for this subflow. 148 149 * 149 - * MPTCP_EVENT_SUB_PRIORITY: token, family, saddr4 | saddr6, daddr4 | daddr6, 150 - * sport, dport, backup, if_idx [, error] 151 - * The priority of a subflow has changed. 'error' should not be set. 150 + * MPTCP_EVENT_SUB_PRIORITY: token, family, loc_id, rem_id, saddr4 | saddr6, 151 + * daddr4 | daddr6, sport, dport, backup, if_idx 152 + * [, error] 153 + * The priority of a subflow has changed. 'error' should not be set. 152 154 */ 153 155 enum mptcp_event_type { 154 156 MPTCP_EVENT_UNSPEC = 0,
+10 -11
kernel/audit.c
··· 718 718 { 719 719 int rc = 0; 720 720 struct sk_buff *skb; 721 - static unsigned int failed = 0; 721 + unsigned int failed = 0; 722 722 723 723 /* NOTE: kauditd_thread takes care of all our locking, we just use 724 724 * the netlink info passed to us (e.g. sk and portid) */ ··· 735 735 continue; 736 736 } 737 737 738 + retry: 738 739 /* grab an extra skb reference in case of error */ 739 740 skb_get(skb); 740 741 rc = netlink_unicast(sk, skb, portid, 0); 741 742 if (rc < 0) { 742 - /* fatal failure for our queue flush attempt? */ 743 + /* send failed - try a few times unless fatal error */ 743 744 if (++failed >= retry_limit || 744 745 rc == -ECONNREFUSED || rc == -EPERM) { 745 - /* yes - error processing for the queue */ 746 746 sk = NULL; 747 747 if (err_hook) 748 748 (*err_hook)(skb); 749 - if (!skb_hook) 750 - goto out; 751 - /* keep processing with the skb_hook */ 749 + if (rc == -EAGAIN) 750 + rc = 0; 751 + /* continue to drain the queue */ 752 752 continue; 753 753 } else 754 - /* no - requeue to preserve ordering */ 755 - skb_queue_head(queue, skb); 754 + goto retry; 756 755 } else { 757 - /* it worked - drop the extra reference and continue */ 756 + /* skb sent - drop the extra reference and continue */ 758 757 consume_skb(skb); 759 758 failed = 0; 760 759 } 761 760 } 762 761 763 - out: 764 762 return (rc >= 0 ? 0 : rc); 765 763 } 766 764 ··· 1607 1609 audit_panic("cannot initialize netlink socket in namespace"); 1608 1610 return -ENOMEM; 1609 1611 } 1610 - aunet->sk->sk_sndtimeo = MAX_SCHEDULE_TIMEOUT; 1612 + /* limit the timeout in case auditd is blocked/stopped */ 1613 + aunet->sk->sk_sndtimeo = HZ / 10; 1611 1614 1612 1615 return 0; 1613 1616 }
+36 -17
kernel/bpf/verifier.c
··· 1366 1366 reg->var_off = tnum_or(tnum_clear_subreg(var64_off), var32_off); 1367 1367 } 1368 1368 1369 + static bool __reg32_bound_s64(s32 a) 1370 + { 1371 + return a >= 0 && a <= S32_MAX; 1372 + } 1373 + 1369 1374 static void __reg_assign_32_into_64(struct bpf_reg_state *reg) 1370 1375 { 1371 1376 reg->umin_value = reg->u32_min_value; 1372 1377 reg->umax_value = reg->u32_max_value; 1373 - /* Attempt to pull 32-bit signed bounds into 64-bit bounds 1374 - * but must be positive otherwise set to worse case bounds 1375 - * and refine later from tnum. 1378 + 1379 + /* Attempt to pull 32-bit signed bounds into 64-bit bounds but must 1380 + * be positive otherwise set to worse case bounds and refine later 1381 + * from tnum. 1376 1382 */ 1377 - if (reg->s32_min_value >= 0 && reg->s32_max_value >= 0) 1378 - reg->smax_value = reg->s32_max_value; 1379 - else 1380 - reg->smax_value = U32_MAX; 1381 - if (reg->s32_min_value >= 0) 1383 + if (__reg32_bound_s64(reg->s32_min_value) && 1384 + __reg32_bound_s64(reg->s32_max_value)) { 1382 1385 reg->smin_value = reg->s32_min_value; 1383 - else 1386 + reg->smax_value = reg->s32_max_value; 1387 + } else { 1384 1388 reg->smin_value = 0; 1389 + reg->smax_value = U32_MAX; 1390 + } 1385 1391 } 1386 1392 1387 1393 static void __reg_combine_32_into_64(struct bpf_reg_state *reg) ··· 2385 2379 */ 2386 2380 if (insn->src_reg != BPF_REG_FP) 2387 2381 return 0; 2388 - if (BPF_SIZE(insn->code) != BPF_DW) 2389 - return 0; 2390 2382 2391 2383 /* dreg = *(u64 *)[fp - off] was a fill from the stack. 2392 2384 * that [fp - off] slot contains scalar that needs to be ··· 2406 2402 return -ENOTSUPP; 2407 2403 /* scalars can only be spilled into stack */ 2408 2404 if (insn->dst_reg != BPF_REG_FP) 2409 - return 0; 2410 - if (BPF_SIZE(insn->code) != BPF_DW) 2411 2405 return 0; 2412 2406 spi = (-insn->off - 1) / BPF_REG_SIZE; 2413 2407 if (spi >= 64) { ··· 4553 4551 4554 4552 if (insn->imm == BPF_CMPXCHG) { 4555 4553 /* Check comparison of R0 with memory location */ 4556 - err = check_reg_arg(env, BPF_REG_0, SRC_OP); 4554 + const u32 aux_reg = BPF_REG_0; 4555 + 4556 + err = check_reg_arg(env, aux_reg, SRC_OP); 4557 4557 if (err) 4558 4558 return err; 4559 + 4560 + if (is_pointer_value(env, aux_reg)) { 4561 + verbose(env, "R%d leaks addr into mem\n", aux_reg); 4562 + return -EACCES; 4563 + } 4559 4564 } 4560 4565 4561 4566 if (is_pointer_value(env, insn->src_reg)) { ··· 4597 4588 load_reg = -1; 4598 4589 } 4599 4590 4600 - /* check whether we can read the memory */ 4591 + /* Check whether we can read the memory, with second call for fetch 4592 + * case to simulate the register fill. 4593 + */ 4601 4594 err = check_mem_access(env, insn_idx, insn->dst_reg, insn->off, 4602 - BPF_SIZE(insn->code), BPF_READ, load_reg, true); 4595 + BPF_SIZE(insn->code), BPF_READ, -1, true); 4596 + if (!err && load_reg >= 0) 4597 + err = check_mem_access(env, insn_idx, insn->dst_reg, insn->off, 4598 + BPF_SIZE(insn->code), BPF_READ, load_reg, 4599 + true); 4603 4600 if (err) 4604 4601 return err; 4605 4602 4606 - /* check whether we can write into the same memory */ 4603 + /* Check whether we can write into the same memory. */ 4607 4604 err = check_mem_access(env, insn_idx, insn->dst_reg, insn->off, 4608 4605 BPF_SIZE(insn->code), BPF_WRITE, -1, true); 4609 4606 if (err) ··· 8323 8308 insn->dst_reg); 8324 8309 } 8325 8310 zext_32_to_64(dst_reg); 8311 + 8312 + __update_reg_bounds(dst_reg); 8313 + __reg_deduce_bounds(dst_reg); 8314 + __reg_bound_offset(dst_reg); 8326 8315 } 8327 8316 } else { 8328 8317 /* case: R = imm
+1 -1
kernel/locking/rtmutex.c
··· 1380 1380 * - the VCPU on which owner runs is preempted 1381 1381 */ 1382 1382 if (!owner->on_cpu || need_resched() || 1383 - rt_mutex_waiter_is_top_waiter(lock, waiter) || 1383 + !rt_mutex_waiter_is_top_waiter(lock, waiter) || 1384 1384 vcpu_is_preempted(task_cpu(owner))) { 1385 1385 res = false; 1386 1386 break;
+9
kernel/signal.c
··· 4185 4185 ss_mode != 0)) 4186 4186 return -EINVAL; 4187 4187 4188 + /* 4189 + * Return before taking any locks if no actual 4190 + * sigaltstack changes were requested. 4191 + */ 4192 + if (t->sas_ss_sp == (unsigned long)ss_sp && 4193 + t->sas_ss_size == ss_size && 4194 + t->sas_ss_flags == ss_flags) 4195 + return 0; 4196 + 4188 4197 sigaltstack_lock(); 4189 4198 if (ss_mode == SS_DISABLE) { 4190 4199 ss_size = 0;
+1 -2
kernel/time/timekeeping.c
··· 1306 1306 timekeeping_forward_now(tk); 1307 1307 1308 1308 xt = tk_xtime(tk); 1309 - ts_delta.tv_sec = ts->tv_sec - xt.tv_sec; 1310 - ts_delta.tv_nsec = ts->tv_nsec - xt.tv_nsec; 1309 + ts_delta = timespec64_sub(*ts, xt); 1311 1310 1312 1311 if (timespec64_compare(&tk->wall_to_monotonic, &ts_delta) > 0) { 1313 1312 ret = -EINVAL;
+1 -1
net/core/skbuff.c
··· 832 832 ntohs(skb->protocol), skb->pkt_type, skb->skb_iif); 833 833 834 834 if (dev) 835 - printk("%sdev name=%s feat=0x%pNF\n", 835 + printk("%sdev name=%s feat=%pNF\n", 836 836 level, dev->name, &dev->features); 837 837 if (sk) 838 838 printk("%ssk family=%hu type=%u proto=%u\n",
+1 -3
net/ipv4/inet_diag.c
··· 261 261 r->idiag_state = sk->sk_state; 262 262 r->idiag_timer = 0; 263 263 r->idiag_retrans = 0; 264 + r->idiag_expires = 0; 264 265 265 266 if (inet_diag_msg_attrs_fill(sk, skb, r, ext, 266 267 sk_user_ns(NETLINK_CB(cb->skb).sk), ··· 315 314 r->idiag_retrans = icsk->icsk_probes_out; 316 315 r->idiag_expires = 317 316 jiffies_delta_to_msecs(sk->sk_timer.expires - jiffies); 318 - } else { 319 - r->idiag_timer = 0; 320 - r->idiag_expires = 0; 321 317 } 322 318 323 319 if ((ext & (1 << (INET_DIAG_INFO - 1))) && handler->idiag_info_size) {
-1
net/ipv6/sit.c
··· 1933 1933 return 0; 1934 1934 1935 1935 err_reg_dev: 1936 - ipip6_dev_free(sitn->fb_tunnel_dev); 1937 1936 free_netdev(sitn->fb_tunnel_dev); 1938 1937 err_alloc_dev: 1939 1938 return err;
+3 -2
net/mac80211/agg-rx.c
··· 9 9 * Copyright 2007, Michael Wu <flamingice@sourmilk.net> 10 10 * Copyright 2007-2010, Intel Corporation 11 11 * Copyright(c) 2015-2017 Intel Deutschland GmbH 12 - * Copyright (C) 2018-2020 Intel Corporation 12 + * Copyright (C) 2018-2021 Intel Corporation 13 13 */ 14 14 15 15 /** ··· 191 191 sband = ieee80211_get_sband(sdata); 192 192 if (!sband) 193 193 return; 194 - he_cap = ieee80211_get_he_iftype_cap(sband, sdata->vif.type); 194 + he_cap = ieee80211_get_he_iftype_cap(sband, 195 + ieee80211_vif_type_p2p(&sdata->vif)); 195 196 if (!he_cap) 196 197 return; 197 198
+11 -5
net/mac80211/agg-tx.c
··· 9 9 * Copyright 2007, Michael Wu <flamingice@sourmilk.net> 10 10 * Copyright 2007-2010, Intel Corporation 11 11 * Copyright(c) 2015-2017 Intel Deutschland GmbH 12 - * Copyright (C) 2018 - 2020 Intel Corporation 12 + * Copyright (C) 2018 - 2021 Intel Corporation 13 13 */ 14 14 15 15 #include <linux/ieee80211.h> ··· 106 106 mgmt->u.action.u.addba_req.start_seq_num = 107 107 cpu_to_le16(start_seq_num << 4); 108 108 109 - ieee80211_tx_skb(sdata, skb); 109 + ieee80211_tx_skb_tid(sdata, skb, tid); 110 110 } 111 111 112 112 void ieee80211_send_bar(struct ieee80211_vif *vif, u8 *ra, u16 tid, u16 ssn) ··· 213 213 struct ieee80211_txq *txq = sta->sta.txq[tid]; 214 214 struct txq_info *txqi; 215 215 216 + lockdep_assert_held(&sta->ampdu_mlme.mtx); 217 + 216 218 if (!txq) 217 219 return; 218 220 ··· 292 290 ieee80211_assign_tid_tx(sta, tid, NULL); 293 291 294 292 ieee80211_agg_splice_finish(sta->sdata, tid); 295 - ieee80211_agg_start_txq(sta, tid, false); 296 293 297 294 kfree_rcu(tid_tx, rcu_head); 298 295 } ··· 481 480 482 481 /* send AddBA request */ 483 482 ieee80211_send_addba_request(sdata, sta->sta.addr, tid, 484 - tid_tx->dialog_token, 485 - sta->tid_seq[tid] >> 4, 483 + tid_tx->dialog_token, tid_tx->ssn, 486 484 buf_size, tid_tx->timeout); 487 485 488 486 WARN_ON(test_and_set_bit(HT_AGG_STATE_SENT_ADDBA, &tid_tx->state)); ··· 523 523 524 524 params.ssn = sta->tid_seq[tid] >> 4; 525 525 ret = drv_ampdu_action(local, sdata, &params); 526 + tid_tx->ssn = params.ssn; 526 527 if (ret == IEEE80211_AMPDU_TX_START_DELAY_ADDBA) { 527 528 return; 528 529 } else if (ret == IEEE80211_AMPDU_TX_START_IMMEDIATE) { ··· 890 889 { 891 890 struct ieee80211_sub_if_data *sdata = sta->sdata; 892 891 bool send_delba = false; 892 + bool start_txq = false; 893 893 894 894 ht_dbg(sdata, "Stopping Tx BA session for %pM tid %d\n", 895 895 sta->sta.addr, tid); ··· 908 906 send_delba = true; 909 907 910 908 ieee80211_remove_tid_tx(sta, tid); 909 + start_txq = true; 911 910 912 911 unlock_sta: 913 912 spin_unlock_bh(&sta->lock); 913 + 914 + if (start_txq) 915 + ieee80211_agg_start_txq(sta, tid, false); 914 916 915 917 if (send_delba) 916 918 ieee80211_send_delba(sdata, sta->sta.addr, tid,
+4 -1
net/mac80211/driver-ops.h
··· 1219 1219 { 1220 1220 struct ieee80211_sub_if_data *sdata = vif_to_sdata(txq->txq.vif); 1221 1221 1222 - if (local->in_reconfig) 1222 + /* In reconfig don't transmit now, but mark for waking later */ 1223 + if (local->in_reconfig) { 1224 + set_bit(IEEE80211_TXQ_STOP_NETIF_TX, &txq->flags); 1223 1225 return; 1226 + } 1224 1227 1225 1228 if (!check_sdata_in_driver(sdata)) 1226 1229 return;
+10 -3
net/mac80211/mlme.c
··· 2452 2452 u16 tx_time) 2453 2453 { 2454 2454 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; 2455 - u16 tid = ieee80211_get_tid(hdr); 2456 - int ac = ieee80211_ac_from_tid(tid); 2457 - struct ieee80211_sta_tx_tspec *tx_tspec = &ifmgd->tx_tspec[ac]; 2455 + u16 tid; 2456 + int ac; 2457 + struct ieee80211_sta_tx_tspec *tx_tspec; 2458 2458 unsigned long now = jiffies; 2459 + 2460 + if (!ieee80211_is_data_qos(hdr->frame_control)) 2461 + return; 2462 + 2463 + tid = ieee80211_get_tid(hdr); 2464 + ac = ieee80211_ac_from_tid(tid); 2465 + tx_tspec = &ifmgd->tx_tspec[ac]; 2459 2466 2460 2467 if (likely(!tx_tspec->admitted_time)) 2461 2468 return;
+1
net/mac80211/rx.c
··· 2944 2944 if (!fwd_skb) 2945 2945 goto out; 2946 2946 2947 + fwd_skb->dev = sdata->dev; 2947 2948 fwd_hdr = (struct ieee80211_hdr *) fwd_skb->data; 2948 2949 fwd_hdr->frame_control &= ~cpu_to_le16(IEEE80211_FCTL_RETRY); 2949 2950 info = IEEE80211_SKB_CB(fwd_skb);
+12 -9
net/mac80211/sta_info.c
··· 644 644 /* check if STA exists already */ 645 645 if (sta_info_get_bss(sdata, sta->sta.addr)) { 646 646 err = -EEXIST; 647 - goto out_err; 647 + goto out_cleanup; 648 648 } 649 649 650 650 sinfo = kzalloc(sizeof(struct station_info), GFP_KERNEL); 651 651 if (!sinfo) { 652 652 err = -ENOMEM; 653 - goto out_err; 653 + goto out_cleanup; 654 654 } 655 655 656 656 local->num_sta++; ··· 667 667 668 668 list_add_tail_rcu(&sta->list, &local->sta_list); 669 669 670 + /* update channel context before notifying the driver about state 671 + * change, this enables driver using the updated channel context right away. 672 + */ 673 + if (sta->sta_state >= IEEE80211_STA_ASSOC) { 674 + ieee80211_recalc_min_chandef(sta->sdata); 675 + if (!sta->sta.support_p2p_ps) 676 + ieee80211_recalc_p2p_go_ps_allowed(sta->sdata); 677 + } 678 + 670 679 /* notify driver */ 671 680 err = sta_info_insert_drv_state(local, sdata, sta); 672 681 if (err) 673 682 goto out_remove; 674 683 675 684 set_sta_flag(sta, WLAN_STA_INSERTED); 676 - 677 - if (sta->sta_state >= IEEE80211_STA_ASSOC) { 678 - ieee80211_recalc_min_chandef(sta->sdata); 679 - if (!sta->sta.support_p2p_ps) 680 - ieee80211_recalc_p2p_go_ps_allowed(sta->sdata); 681 - } 682 685 683 686 /* accept BA sessions now */ 684 687 clear_sta_flag(sta, WLAN_STA_BLOCK_BA); ··· 709 706 out_drop_sta: 710 707 local->num_sta--; 711 708 synchronize_net(); 709 + out_cleanup: 712 710 cleanup_single_sta(sta); 713 - out_err: 714 711 mutex_unlock(&local->sta_mtx); 715 712 kfree(sinfo); 716 713 rcu_read_lock();
+2
net/mac80211/sta_info.h
··· 176 176 * @failed_bar_ssn: ssn of the last failed BAR tx attempt 177 177 * @bar_pending: BAR needs to be re-sent 178 178 * @amsdu: support A-MSDU withing A-MDPU 179 + * @ssn: starting sequence number of the session 179 180 * 180 181 * This structure's lifetime is managed by RCU, assignments to 181 182 * the array holding it must hold the aggregation mutex. ··· 200 199 u8 stop_initiator; 201 200 bool tx_stop; 202 201 u16 buf_size; 202 + u16 ssn; 203 203 204 204 u16 failed_bar_ssn; 205 205 bool bar_pending;
+5 -5
net/mac80211/tx.c
··· 1822 1822 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx->skb); 1823 1823 ieee80211_tx_result res = TX_CONTINUE; 1824 1824 1825 + if (!ieee80211_hw_check(&tx->local->hw, HAS_RATE_CONTROL)) 1826 + CALL_TXH(ieee80211_tx_h_rate_ctrl); 1827 + 1825 1828 if (unlikely(info->flags & IEEE80211_TX_INTFL_RETRANSMISSION)) { 1826 1829 __skb_queue_tail(&tx->skbs, tx->skb); 1827 1830 tx->skb = NULL; 1828 1831 goto txh_done; 1829 1832 } 1830 - 1831 - if (!ieee80211_hw_check(&tx->local->hw, HAS_RATE_CONTROL)) 1832 - CALL_TXH(ieee80211_tx_h_rate_ctrl); 1833 1833 1834 1834 CALL_TXH(ieee80211_tx_h_michael_mic_add); 1835 1835 CALL_TXH(ieee80211_tx_h_sequence); ··· 4191 4191 4192 4192 ieee80211_aggr_check(sdata, sta, skb); 4193 4193 4194 + sk_pacing_shift_update(skb->sk, sdata->local->hw.tx_sk_pacing_shift); 4195 + 4194 4196 if (sta) { 4195 4197 struct ieee80211_fast_tx *fast_tx; 4196 - 4197 - sk_pacing_shift_update(skb->sk, sdata->local->hw.tx_sk_pacing_shift); 4198 4198 4199 4199 fast_tx = rcu_dereference(sta->fast_tx); 4200 4200
+14 -9
net/mac80211/util.c
··· 943 943 struct ieee802_11_elems *elems) 944 944 { 945 945 const void *data = elem->data + 1; 946 - u8 len = elem->datalen - 1; 946 + u8 len; 947 + 948 + if (!elem->datalen) 949 + return; 950 + 951 + len = elem->datalen - 1; 947 952 948 953 switch (elem->data[0]) { 949 954 case WLAN_EID_EXT_HE_MU_EDCA: ··· 2068 2063 chandef.chan = chan; 2069 2064 2070 2065 skb = ieee80211_probereq_get(&local->hw, src, ssid, ssid_len, 2071 - 100 + ie_len); 2066 + local->scan_ies_len + ie_len); 2072 2067 if (!skb) 2073 2068 return NULL; 2074 2069 ··· 2651 2646 mutex_unlock(&local->sta_mtx); 2652 2647 } 2653 2648 2649 + /* 2650 + * If this is for hw restart things are still running. 2651 + * We may want to change that later, however. 2652 + */ 2653 + if (local->open_count && (!suspended || reconfig_due_to_wowlan)) 2654 + drv_reconfig_complete(local, IEEE80211_RECONFIG_TYPE_RESTART); 2655 + 2654 2656 if (local->in_reconfig) { 2655 2657 local->in_reconfig = false; 2656 2658 barrier(); ··· 2675 2663 ieee80211_wake_queues_by_reason(hw, IEEE80211_MAX_QUEUE_MAP, 2676 2664 IEEE80211_QUEUE_STOP_REASON_SUSPEND, 2677 2665 false); 2678 - 2679 - /* 2680 - * If this is for hw restart things are still running. 2681 - * We may want to change that later, however. 2682 - */ 2683 - if (local->open_count && (!suspended || reconfig_due_to_wowlan)) 2684 - drv_reconfig_complete(local, IEEE80211_RECONFIG_TYPE_RESTART); 2685 2666 2686 2667 if (!suspended) 2687 2668 return 0;
+3
net/mptcp/pm_netlink.c
··· 700 700 701 701 msk_owned_by_me(msk); 702 702 703 + if (sk->sk_state == TCP_LISTEN) 704 + return; 705 + 703 706 if (!rm_list->nr) 704 707 return; 705 708
+4 -2
net/mptcp/protocol.c
··· 1524 1524 int ret = 0; 1525 1525 1526 1526 prev_ssk = ssk; 1527 - mptcp_flush_join_list(msk); 1527 + __mptcp_flush_join_list(msk); 1528 1528 ssk = mptcp_subflow_get_send(msk); 1529 1529 1530 1530 /* First check. If the ssk has changed since ··· 2879 2879 */ 2880 2880 if (WARN_ON_ONCE(!new_mptcp_sock)) { 2881 2881 tcp_sk(newsk)->is_mptcp = 0; 2882 - return newsk; 2882 + goto out; 2883 2883 } 2884 2884 2885 2885 /* acquire the 2nd reference for the owning socket */ ··· 2891 2891 MPTCP_MIB_MPCAPABLEPASSIVEFALLBACK); 2892 2892 } 2893 2893 2894 + out: 2895 + newsk->sk_kern_sock = kern; 2894 2896 return newsk; 2895 2897 } 2896 2898
-1
net/mptcp/sockopt.c
··· 525 525 case TCP_NODELAY: 526 526 case TCP_THIN_LINEAR_TIMEOUTS: 527 527 case TCP_CONGESTION: 528 - case TCP_ULP: 529 528 case TCP_CORK: 530 529 case TCP_KEEPIDLE: 531 530 case TCP_KEEPINTVL:
+3 -2
net/packet/af_packet.c
··· 4492 4492 } 4493 4493 4494 4494 out_free_pg_vec: 4495 - bitmap_free(rx_owner_map); 4496 - if (pg_vec) 4495 + if (pg_vec) { 4496 + bitmap_free(rx_owner_map); 4497 4497 free_pg_vec(pg_vec, order, req->tp_block_nr); 4498 + } 4498 4499 out: 4499 4500 return err; 4500 4501 }
+1
net/phonet/pep.c
··· 868 868 869 869 err = pep_accept_conn(newsk, skb); 870 870 if (err) { 871 + __sock_put(sk); 871 872 sock_put(newsk); 872 873 newsk = NULL; 873 874 goto drop;
+1
net/rds/connection.c
··· 253 253 * should end up here, but if it 254 254 * does, reset/destroy the connection. 255 255 */ 256 + kfree(conn->c_path); 256 257 kmem_cache_free(rds_conn_slab, conn); 257 258 conn = ERR_PTR(-EOPNOTSUPP); 258 259 goto out;
+1
net/sched/cls_api.c
··· 3687 3687 entry->mpls_mangle.ttl = tcf_mpls_ttl(act); 3688 3688 break; 3689 3689 default: 3690 + err = -EOPNOTSUPP; 3690 3691 goto err_out_locked; 3691 3692 } 3692 3693 } else if (is_tcf_skbedit_ptype(act)) {
+1 -5
net/sched/sch_cake.c
··· 2736 2736 q->tins = kvcalloc(CAKE_MAX_TINS, sizeof(struct cake_tin_data), 2737 2737 GFP_KERNEL); 2738 2738 if (!q->tins) 2739 - goto nomem; 2739 + return -ENOMEM; 2740 2740 2741 2741 for (i = 0; i < CAKE_MAX_TINS; i++) { 2742 2742 struct cake_tin_data *b = q->tins + i; ··· 2766 2766 q->min_netlen = ~0; 2767 2767 q->min_adjlen = ~0; 2768 2768 return 0; 2769 - 2770 - nomem: 2771 - cake_destroy(sch); 2772 - return -ENOMEM; 2773 2769 } 2774 2770 2775 2771 static int cake_dump(struct Qdisc *sch, struct sk_buff *skb)
+2 -2
net/sched/sch_ets.c
··· 666 666 } 667 667 } 668 668 for (i = q->nbands; i < oldbands; i++) { 669 - qdisc_tree_flush_backlog(q->classes[i].qdisc); 670 - if (i >= q->nstrict) 669 + if (i >= q->nstrict && q->classes[i].qdisc->q.qlen) 671 670 list_del(&q->classes[i].alist); 671 + qdisc_tree_flush_backlog(q->classes[i].qdisc); 672 672 } 673 673 q->nstrict = nstrict; 674 674 memcpy(q->prio2band, priomap, sizeof(priomap));
+3 -1
net/smc/af_smc.c
··· 194 194 /* cleanup for a dangling non-blocking connect */ 195 195 if (smc->connect_nonblock && sk->sk_state == SMC_INIT) 196 196 tcp_abort(smc->clcsock->sk, ECONNABORTED); 197 - flush_work(&smc->connect_work); 197 + 198 + if (cancel_work_sync(&smc->connect_work)) 199 + sock_put(&smc->sk); /* sock_hold in smc_connect for passive closing */ 198 200 199 201 if (sk->sk_state == SMC_LISTEN) 200 202 /* smc_close_non_accepted() is called and acquires
+2 -1
net/vmw_vsock/virtio_transport_common.c
··· 1299 1299 space_available = virtio_transport_space_update(sk, pkt); 1300 1300 1301 1301 /* Update CID in case it has changed after a transport reset event */ 1302 - vsk->local_addr.svm_cid = dst.svm_cid; 1302 + if (vsk->local_addr.svm_cid != VMADDR_CID_ANY) 1303 + vsk->local_addr.svm_cid = dst.svm_cid; 1303 1304 1304 1305 if (space_available) 1305 1306 sk->sk_write_space(sk);
+28 -2
net/wireless/reg.c
··· 133 133 134 134 static void restore_regulatory_settings(bool reset_user, bool cached); 135 135 static void print_regdomain(const struct ieee80211_regdomain *rd); 136 + static void reg_process_hint(struct regulatory_request *reg_request); 136 137 137 138 static const struct ieee80211_regdomain *get_cfg80211_regdom(void) 138 139 { ··· 1099 1098 const struct firmware *fw; 1100 1099 void *db; 1101 1100 int err; 1101 + const struct ieee80211_regdomain *current_regdomain; 1102 + struct regulatory_request *request; 1102 1103 1103 1104 err = request_firmware(&fw, "regulatory.db", &reg_pdev->dev); 1104 1105 if (err) ··· 1121 1118 if (!IS_ERR_OR_NULL(regdb)) 1122 1119 kfree(regdb); 1123 1120 regdb = db; 1124 - rtnl_unlock(); 1125 1121 1122 + /* reset regulatory domain */ 1123 + current_regdomain = get_cfg80211_regdom(); 1124 + 1125 + request = kzalloc(sizeof(*request), GFP_KERNEL); 1126 + if (!request) { 1127 + err = -ENOMEM; 1128 + goto out_unlock; 1129 + } 1130 + 1131 + request->wiphy_idx = WIPHY_IDX_INVALID; 1132 + request->alpha2[0] = current_regdomain->alpha2[0]; 1133 + request->alpha2[1] = current_regdomain->alpha2[1]; 1134 + request->initiator = NL80211_REGDOM_SET_BY_CORE; 1135 + request->user_reg_hint_type = NL80211_USER_REG_HINT_USER; 1136 + 1137 + reg_process_hint(request); 1138 + 1139 + out_unlock: 1140 + rtnl_unlock(); 1126 1141 out: 1127 1142 release_firmware(fw); 1128 1143 return err; ··· 2359 2338 struct cfg80211_chan_def chandef = {}; 2360 2339 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); 2361 2340 enum nl80211_iftype iftype; 2341 + bool ret; 2362 2342 2363 2343 wdev_lock(wdev); 2364 2344 iftype = wdev->iftype; ··· 2409 2387 case NL80211_IFTYPE_AP: 2410 2388 case NL80211_IFTYPE_P2P_GO: 2411 2389 case NL80211_IFTYPE_ADHOC: 2412 - return cfg80211_reg_can_beacon_relax(wiphy, &chandef, iftype); 2390 + wiphy_lock(wiphy); 2391 + ret = cfg80211_reg_can_beacon_relax(wiphy, &chandef, iftype); 2392 + wiphy_unlock(wiphy); 2393 + 2394 + return ret; 2413 2395 case NL80211_IFTYPE_STATION: 2414 2396 case NL80211_IFTYPE_P2P_CLIENT: 2415 2397 return cfg80211_chandef_usable(wiphy, &chandef,
+2 -2
net/xdp/xsk.c
··· 677 677 struct xdp_sock *xs = xdp_sk(sk); 678 678 struct xsk_buff_pool *pool; 679 679 680 - sock_poll_wait(file, sock, wait); 681 - 682 680 if (unlikely(!xsk_is_bound(xs))) 683 681 return mask; 684 682 ··· 688 690 else 689 691 /* Poll needs to drive Tx also in copy mode */ 690 692 __xsk_sendmsg(sk); 693 + } else { 694 + sock_poll_wait(file, sock, wait); 691 695 } 692 696 693 697 if (xs->rx && !xskq_prod_is_empty(xs->rx))
+1 -1
scripts/recordmcount.pl
··· 219 219 220 220 } elsif ($arch eq "s390" && $bits == 64) { 221 221 if ($cc =~ /-DCC_USING_HOTPATCH/) { 222 - $mcount_regex = "^\\s*([0-9a-fA-F]+):\\s*c0 04 00 00 00 00\\s*brcl\\s*0,[0-9a-f]+ <([^\+]*)>\$"; 222 + $mcount_regex = "^\\s*([0-9a-fA-F]+):\\s*c0 04 00 00 00 00\\s*(bcrl\\s*0,|jgnop\\s*)[0-9a-f]+ <([^\+]*)>\$"; 223 223 $mcount_adjust = 0; 224 224 } 225 225 $alignment = 8;
+19 -14
security/selinux/hooks.c
··· 611 611 return 0; 612 612 } 613 613 614 - static int parse_sid(struct super_block *sb, const char *s, u32 *sid) 614 + static int parse_sid(struct super_block *sb, const char *s, u32 *sid, 615 + gfp_t gfp) 615 616 { 616 617 int rc = security_context_str_to_sid(&selinux_state, s, 617 - sid, GFP_KERNEL); 618 + sid, gfp); 618 619 if (rc) 619 620 pr_warn("SELinux: security_context_str_to_sid" 620 621 "(%s) failed for (dev %s, type %s) errno=%d\n", ··· 686 685 */ 687 686 if (opts) { 688 687 if (opts->fscontext) { 689 - rc = parse_sid(sb, opts->fscontext, &fscontext_sid); 688 + rc = parse_sid(sb, opts->fscontext, &fscontext_sid, 689 + GFP_KERNEL); 690 690 if (rc) 691 691 goto out; 692 692 if (bad_option(sbsec, FSCONTEXT_MNT, sbsec->sid, ··· 696 694 sbsec->flags |= FSCONTEXT_MNT; 697 695 } 698 696 if (opts->context) { 699 - rc = parse_sid(sb, opts->context, &context_sid); 697 + rc = parse_sid(sb, opts->context, &context_sid, 698 + GFP_KERNEL); 700 699 if (rc) 701 700 goto out; 702 701 if (bad_option(sbsec, CONTEXT_MNT, sbsec->mntpoint_sid, ··· 706 703 sbsec->flags |= CONTEXT_MNT; 707 704 } 708 705 if (opts->rootcontext) { 709 - rc = parse_sid(sb, opts->rootcontext, &rootcontext_sid); 706 + rc = parse_sid(sb, opts->rootcontext, &rootcontext_sid, 707 + GFP_KERNEL); 710 708 if (rc) 711 709 goto out; 712 710 if (bad_option(sbsec, ROOTCONTEXT_MNT, root_isec->sid, ··· 716 712 sbsec->flags |= ROOTCONTEXT_MNT; 717 713 } 718 714 if (opts->defcontext) { 719 - rc = parse_sid(sb, opts->defcontext, &defcontext_sid); 715 + rc = parse_sid(sb, opts->defcontext, &defcontext_sid, 716 + GFP_KERNEL); 720 717 if (rc) 721 718 goto out; 722 719 if (bad_option(sbsec, DEFCONTEXT_MNT, sbsec->def_sid, ··· 2707 2702 return (sbsec->flags & SE_MNTMASK) ? 1 : 0; 2708 2703 2709 2704 if (opts->fscontext) { 2710 - rc = parse_sid(sb, opts->fscontext, &sid); 2705 + rc = parse_sid(sb, opts->fscontext, &sid, GFP_NOWAIT); 2711 2706 if (rc) 2712 2707 return 1; 2713 2708 if (bad_option(sbsec, FSCONTEXT_MNT, sbsec->sid, sid)) 2714 2709 return 1; 2715 2710 } 2716 2711 if (opts->context) { 2717 - rc = parse_sid(sb, opts->context, &sid); 2712 + rc = parse_sid(sb, opts->context, &sid, GFP_NOWAIT); 2718 2713 if (rc) 2719 2714 return 1; 2720 2715 if (bad_option(sbsec, CONTEXT_MNT, sbsec->mntpoint_sid, sid)) ··· 2724 2719 struct inode_security_struct *root_isec; 2725 2720 2726 2721 root_isec = backing_inode_security(sb->s_root); 2727 - rc = parse_sid(sb, opts->rootcontext, &sid); 2722 + rc = parse_sid(sb, opts->rootcontext, &sid, GFP_NOWAIT); 2728 2723 if (rc) 2729 2724 return 1; 2730 2725 if (bad_option(sbsec, ROOTCONTEXT_MNT, root_isec->sid, sid)) 2731 2726 return 1; 2732 2727 } 2733 2728 if (opts->defcontext) { 2734 - rc = parse_sid(sb, opts->defcontext, &sid); 2729 + rc = parse_sid(sb, opts->defcontext, &sid, GFP_NOWAIT); 2735 2730 if (rc) 2736 2731 return 1; 2737 2732 if (bad_option(sbsec, DEFCONTEXT_MNT, sbsec->def_sid, sid)) ··· 2754 2749 return 0; 2755 2750 2756 2751 if (opts->fscontext) { 2757 - rc = parse_sid(sb, opts->fscontext, &sid); 2752 + rc = parse_sid(sb, opts->fscontext, &sid, GFP_KERNEL); 2758 2753 if (rc) 2759 2754 return rc; 2760 2755 if (bad_option(sbsec, FSCONTEXT_MNT, sbsec->sid, sid)) 2761 2756 goto out_bad_option; 2762 2757 } 2763 2758 if (opts->context) { 2764 - rc = parse_sid(sb, opts->context, &sid); 2759 + rc = parse_sid(sb, opts->context, &sid, GFP_KERNEL); 2765 2760 if (rc) 2766 2761 return rc; 2767 2762 if (bad_option(sbsec, CONTEXT_MNT, sbsec->mntpoint_sid, sid)) ··· 2770 2765 if (opts->rootcontext) { 2771 2766 struct inode_security_struct *root_isec; 2772 2767 root_isec = backing_inode_security(sb->s_root); 2773 - rc = parse_sid(sb, opts->rootcontext, &sid); 2768 + rc = parse_sid(sb, opts->rootcontext, &sid, GFP_KERNEL); 2774 2769 if (rc) 2775 2770 return rc; 2776 2771 if (bad_option(sbsec, ROOTCONTEXT_MNT, root_isec->sid, sid)) 2777 2772 goto out_bad_option; 2778 2773 } 2779 2774 if (opts->defcontext) { 2780 - rc = parse_sid(sb, opts->defcontext, &sid); 2775 + rc = parse_sid(sb, opts->defcontext, &sid, GFP_KERNEL); 2781 2776 if (rc) 2782 2777 return rc; 2783 2778 if (bad_option(sbsec, DEFCONTEXT_MNT, sbsec->def_sid, sid))
+9 -4
tools/perf/builtin-inject.c
··· 755 755 return inject->itrace_synth_opts.vm_tm_corr_args ? 0 : -ENOMEM; 756 756 } 757 757 758 + static int output_fd(struct perf_inject *inject) 759 + { 760 + return inject->in_place_update ? -1 : perf_data__fd(&inject->output); 761 + } 762 + 758 763 static int __cmd_inject(struct perf_inject *inject) 759 764 { 760 765 int ret = -EINVAL; 761 766 struct perf_session *session = inject->session; 762 - struct perf_data *data_out = &inject->output; 763 - int fd = inject->in_place_update ? -1 : perf_data__fd(data_out); 767 + int fd = output_fd(inject); 764 768 u64 output_data_offset; 765 769 766 770 signal(SIGINT, sig_handler); ··· 1019 1015 } 1020 1016 1021 1017 inject.session = __perf_session__new(&data, repipe, 1022 - perf_data__fd(&inject.output), 1018 + output_fd(&inject), 1023 1019 &inject.tool); 1024 1020 if (IS_ERR(inject.session)) { 1025 1021 ret = PTR_ERR(inject.session); ··· 1082 1078 zstd_fini(&(inject.session->zstd_data)); 1083 1079 perf_session__delete(inject.session); 1084 1080 out_close_output: 1085 - perf_data__close(&inject.output); 1081 + if (!inject.in_place_update) 1082 + perf_data__close(&inject.output); 1086 1083 free(inject.itrace_synth_opts.vm_tm_corr_args); 1087 1084 return ret; 1088 1085 }
+5
tools/perf/util/expr.c
··· 12 12 #include "expr-bison.h" 13 13 #include "expr-flex.h" 14 14 #include "smt.h" 15 + #include <linux/err.h> 15 16 #include <linux/kernel.h> 16 17 #include <linux/zalloc.h> 17 18 #include <ctype.h> ··· 300 299 return NULL; 301 300 302 301 ctx->ids = hashmap__new(key_hash, key_equal, NULL); 302 + if (IS_ERR(ctx->ids)) { 303 + free(ctx); 304 + return NULL; 305 + } 303 306 ctx->runtime = 0; 304 307 305 308 return ctx;
+20
tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.c
··· 33 33 return sum; 34 34 } 35 35 36 + __weak noinline struct file *bpf_testmod_return_ptr(int arg) 37 + { 38 + static struct file f = {}; 39 + 40 + switch (arg) { 41 + case 1: return (void *)EINVAL; /* user addr */ 42 + case 2: return (void *)0xcafe4a11; /* user addr */ 43 + case 3: return (void *)-EINVAL; /* canonical, but invalid */ 44 + case 4: return (void *)(1ull << 60); /* non-canonical and invalid */ 45 + case 5: return (void *)~(1ull << 30); /* trigger extable */ 46 + case 6: return &f; /* valid addr */ 47 + case 7: return (void *)((long)&f | 1); /* kernel tricks */ 48 + default: return NULL; 49 + } 50 + } 51 + 36 52 noinline ssize_t 37 53 bpf_testmod_test_read(struct file *file, struct kobject *kobj, 38 54 struct bin_attribute *bin_attr, ··· 59 43 .off = off, 60 44 .len = len, 61 45 }; 46 + int i = 1; 47 + 48 + while (bpf_testmod_return_ptr(i)) 49 + i++; 62 50 63 51 /* This is always true. Use the check to make sure the compiler 64 52 * doesn't remove bpf_testmod_loop_test.
+14 -2
tools/testing/selftests/bpf/prog_tests/btf_skc_cls_ingress.c
··· 90 90 91 91 static void test_conn(void) 92 92 { 93 - int listen_fd = -1, cli_fd = -1, err; 93 + int listen_fd = -1, cli_fd = -1, srv_fd = -1, err; 94 94 socklen_t addrlen = sizeof(srv_sa6); 95 95 int srv_port; 96 96 ··· 110 110 111 111 cli_fd = connect_to_fd(listen_fd, 0); 112 112 if (CHECK_FAIL(cli_fd == -1)) 113 + goto done; 114 + 115 + srv_fd = accept(listen_fd, NULL, NULL); 116 + if (CHECK_FAIL(srv_fd == -1)) 113 117 goto done; 114 118 115 119 if (CHECK(skel->bss->listen_tp_sport != srv_port || ··· 138 134 close(listen_fd); 139 135 if (cli_fd != -1) 140 136 close(cli_fd); 137 + if (srv_fd != -1) 138 + close(srv_fd); 141 139 } 142 140 143 141 static void test_syncookie(void) 144 142 { 145 - int listen_fd = -1, cli_fd = -1, err; 143 + int listen_fd = -1, cli_fd = -1, srv_fd = -1, err; 146 144 socklen_t addrlen = sizeof(srv_sa6); 147 145 int srv_port; 148 146 ··· 165 159 166 160 cli_fd = connect_to_fd(listen_fd, 0); 167 161 if (CHECK_FAIL(cli_fd == -1)) 162 + goto done; 163 + 164 + srv_fd = accept(listen_fd, NULL, NULL); 165 + if (CHECK_FAIL(srv_fd == -1)) 168 166 goto done; 169 167 170 168 if (CHECK(skel->bss->listen_tp_sport != srv_port, ··· 198 188 close(listen_fd); 199 189 if (cli_fd != -1) 200 190 close(cli_fd); 191 + if (srv_fd != -1) 192 + close(srv_fd); 201 193 } 202 194 203 195 struct test {
+12
tools/testing/selftests/bpf/progs/test_module_attach.c
··· 87 87 return 0; 88 88 } 89 89 90 + SEC("fexit/bpf_testmod_return_ptr") 91 + int BPF_PROG(handle_fexit_ret, int arg, struct file *ret) 92 + { 93 + long buf = 0; 94 + 95 + bpf_probe_read_kernel(&buf, 8, ret); 96 + bpf_probe_read_kernel(&buf, 8, (char *)ret + 256); 97 + *(volatile long long *)ret; 98 + *(volatile int *)&ret->f_mode; 99 + return 0; 100 + } 101 + 90 102 __u32 fmod_ret_read_sz = 0; 91 103 92 104 SEC("fmod_ret/bpf_testmod_test_read")
+1 -1
tools/testing/selftests/bpf/test_verifier.c
··· 54 54 #define MAX_INSNS BPF_MAXINSNS 55 55 #define MAX_TEST_INSNS 1000000 56 56 #define MAX_FIXUPS 8 57 - #define MAX_NR_MAPS 21 57 + #define MAX_NR_MAPS 22 58 58 #define MAX_TEST_RUNS 8 59 59 #define POINTER_VALUE 0xcafe4all 60 60 #define TEST_DATA_LEN 64
+86
tools/testing/selftests/bpf/verifier/atomic_cmpxchg.c
··· 138 138 BPF_EXIT_INSN(), 139 139 }, 140 140 .result = ACCEPT, 141 + .result_unpriv = REJECT, 142 + .errstr_unpriv = "R0 leaks addr into mem", 141 143 }, 142 144 { 143 145 "Dest pointer in r0 - succeed", ··· 158 156 BPF_EXIT_INSN(), 159 157 }, 160 158 .result = ACCEPT, 159 + .result_unpriv = REJECT, 160 + .errstr_unpriv = "R0 leaks addr into mem", 161 + }, 162 + { 163 + "Dest pointer in r0 - succeed, check 2", 164 + .insns = { 165 + /* r0 = &val */ 166 + BPF_MOV64_REG(BPF_REG_0, BPF_REG_10), 167 + /* val = r0; */ 168 + BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_0, -8), 169 + /* r5 = &val */ 170 + BPF_MOV64_REG(BPF_REG_5, BPF_REG_10), 171 + /* r0 = atomic_cmpxchg(&val, r0, r5); */ 172 + BPF_ATOMIC_OP(BPF_DW, BPF_CMPXCHG, BPF_REG_10, BPF_REG_5, -8), 173 + /* r1 = *r0 */ 174 + BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_0, -8), 175 + /* exit(0); */ 176 + BPF_MOV64_IMM(BPF_REG_0, 0), 177 + BPF_EXIT_INSN(), 178 + }, 179 + .result = ACCEPT, 180 + .result_unpriv = REJECT, 181 + .errstr_unpriv = "R0 leaks addr into mem", 182 + }, 183 + { 184 + "Dest pointer in r0 - succeed, check 3", 185 + .insns = { 186 + /* r0 = &val */ 187 + BPF_MOV64_REG(BPF_REG_0, BPF_REG_10), 188 + /* val = r0; */ 189 + BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_0, -8), 190 + /* r5 = &val */ 191 + BPF_MOV64_REG(BPF_REG_5, BPF_REG_10), 192 + /* r0 = atomic_cmpxchg(&val, r0, r5); */ 193 + BPF_ATOMIC_OP(BPF_W, BPF_CMPXCHG, BPF_REG_10, BPF_REG_5, -8), 194 + /* exit(0); */ 195 + BPF_MOV64_IMM(BPF_REG_0, 0), 196 + BPF_EXIT_INSN(), 197 + }, 198 + .result = REJECT, 199 + .errstr = "invalid size of register fill", 200 + .errstr_unpriv = "R0 leaks addr into mem", 201 + }, 202 + { 203 + "Dest pointer in r0 - succeed, check 4", 204 + .insns = { 205 + /* r0 = &val */ 206 + BPF_MOV32_REG(BPF_REG_0, BPF_REG_10), 207 + /* val = r0; */ 208 + BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -8), 209 + /* r5 = &val */ 210 + BPF_MOV32_REG(BPF_REG_5, BPF_REG_10), 211 + /* r0 = atomic_cmpxchg(&val, r0, r5); */ 212 + BPF_ATOMIC_OP(BPF_W, BPF_CMPXCHG, BPF_REG_10, BPF_REG_5, -8), 213 + /* r1 = *r10 */ 214 + BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_10, -8), 215 + /* exit(0); */ 216 + BPF_MOV64_IMM(BPF_REG_0, 0), 217 + BPF_EXIT_INSN(), 218 + }, 219 + .result = ACCEPT, 220 + .result_unpriv = REJECT, 221 + .errstr_unpriv = "R10 partial copy of pointer", 222 + }, 223 + { 224 + "Dest pointer in r0 - succeed, check 5", 225 + .insns = { 226 + /* r0 = &val */ 227 + BPF_MOV32_REG(BPF_REG_0, BPF_REG_10), 228 + /* val = r0; */ 229 + BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -8), 230 + /* r5 = &val */ 231 + BPF_MOV32_REG(BPF_REG_5, BPF_REG_10), 232 + /* r0 = atomic_cmpxchg(&val, r0, r5); */ 233 + BPF_ATOMIC_OP(BPF_W, BPF_CMPXCHG, BPF_REG_10, BPF_REG_5, -8), 234 + /* r1 = *r0 */ 235 + BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, -8), 236 + /* exit(0); */ 237 + BPF_MOV64_IMM(BPF_REG_0, 0), 238 + BPF_EXIT_INSN(), 239 + }, 240 + .result = REJECT, 241 + .errstr = "R0 invalid mem access", 242 + .errstr_unpriv = "R10 partial copy of pointer", 161 243 },
+94
tools/testing/selftests/bpf/verifier/atomic_fetch.c
··· 1 + { 2 + "atomic dw/fetch and address leakage of (map ptr & -1) via stack slot", 3 + .insns = { 4 + BPF_LD_IMM64(BPF_REG_1, -1), 5 + BPF_LD_MAP_FD(BPF_REG_8, 0), 6 + BPF_LD_MAP_FD(BPF_REG_9, 0), 7 + BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 8 + BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), 9 + BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_9, 0), 10 + BPF_ATOMIC_OP(BPF_DW, BPF_AND | BPF_FETCH, BPF_REG_2, BPF_REG_1, 0), 11 + BPF_LDX_MEM(BPF_DW, BPF_REG_9, BPF_REG_2, 0), 12 + BPF_ST_MEM(BPF_DW, BPF_REG_2, 0, 0), 13 + BPF_MOV64_REG(BPF_REG_1, BPF_REG_8), 14 + BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem), 15 + BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 1), 16 + BPF_STX_MEM(BPF_DW, BPF_REG_0, BPF_REG_9, 0), 17 + BPF_MOV64_IMM(BPF_REG_0, 0), 18 + BPF_EXIT_INSN(), 19 + }, 20 + .fixup_map_array_48b = { 2, 4 }, 21 + .result = ACCEPT, 22 + .result_unpriv = REJECT, 23 + .errstr_unpriv = "leaking pointer from stack off -8", 24 + }, 25 + { 26 + "atomic dw/fetch and address leakage of (map ptr & -1) via returned value", 27 + .insns = { 28 + BPF_LD_IMM64(BPF_REG_1, -1), 29 + BPF_LD_MAP_FD(BPF_REG_8, 0), 30 + BPF_LD_MAP_FD(BPF_REG_9, 0), 31 + BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 32 + BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), 33 + BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_9, 0), 34 + BPF_ATOMIC_OP(BPF_DW, BPF_AND | BPF_FETCH, BPF_REG_2, BPF_REG_1, 0), 35 + BPF_MOV64_REG(BPF_REG_9, BPF_REG_1), 36 + BPF_ST_MEM(BPF_DW, BPF_REG_2, 0, 0), 37 + BPF_MOV64_REG(BPF_REG_1, BPF_REG_8), 38 + BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem), 39 + BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 1), 40 + BPF_STX_MEM(BPF_DW, BPF_REG_0, BPF_REG_9, 0), 41 + BPF_MOV64_IMM(BPF_REG_0, 0), 42 + BPF_EXIT_INSN(), 43 + }, 44 + .fixup_map_array_48b = { 2, 4 }, 45 + .result = ACCEPT, 46 + .result_unpriv = REJECT, 47 + .errstr_unpriv = "leaking pointer from stack off -8", 48 + }, 49 + { 50 + "atomic w/fetch and address leakage of (map ptr & -1) via stack slot", 51 + .insns = { 52 + BPF_LD_IMM64(BPF_REG_1, -1), 53 + BPF_LD_MAP_FD(BPF_REG_8, 0), 54 + BPF_LD_MAP_FD(BPF_REG_9, 0), 55 + BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 56 + BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), 57 + BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_9, 0), 58 + BPF_ATOMIC_OP(BPF_W, BPF_AND | BPF_FETCH, BPF_REG_2, BPF_REG_1, 0), 59 + BPF_LDX_MEM(BPF_DW, BPF_REG_9, BPF_REG_2, 0), 60 + BPF_ST_MEM(BPF_DW, BPF_REG_2, 0, 0), 61 + BPF_MOV64_REG(BPF_REG_1, BPF_REG_8), 62 + BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem), 63 + BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 1), 64 + BPF_STX_MEM(BPF_DW, BPF_REG_0, BPF_REG_9, 0), 65 + BPF_MOV64_IMM(BPF_REG_0, 0), 66 + BPF_EXIT_INSN(), 67 + }, 68 + .fixup_map_array_48b = { 2, 4 }, 69 + .result = REJECT, 70 + .errstr = "invalid size of register fill", 71 + }, 72 + { 73 + "atomic w/fetch and address leakage of (map ptr & -1) via returned value", 74 + .insns = { 75 + BPF_LD_IMM64(BPF_REG_1, -1), 76 + BPF_LD_MAP_FD(BPF_REG_8, 0), 77 + BPF_LD_MAP_FD(BPF_REG_9, 0), 78 + BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 79 + BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), 80 + BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_9, 0), 81 + BPF_ATOMIC_OP(BPF_W, BPF_AND | BPF_FETCH, BPF_REG_2, BPF_REG_1, 0), 82 + BPF_MOV64_REG(BPF_REG_9, BPF_REG_1), 83 + BPF_ST_MEM(BPF_DW, BPF_REG_2, 0, 0), 84 + BPF_MOV64_REG(BPF_REG_1, BPF_REG_8), 85 + BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem), 86 + BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 1), 87 + BPF_STX_MEM(BPF_DW, BPF_REG_0, BPF_REG_9, 0), 88 + BPF_MOV64_IMM(BPF_REG_0, 0), 89 + BPF_EXIT_INSN(), 90 + }, 91 + .fixup_map_array_48b = { 2, 4 }, 92 + .result = REJECT, 93 + .errstr = "invalid size of register fill", 94 + }, 1 95 #define __ATOMIC_FETCH_OP_TEST(src_reg, dst_reg, operand1, op, operand2, expect) \ 2 96 { \ 3 97 "atomic fetch " #op ", src=" #dst_reg " dst=" #dst_reg, \
+71
tools/testing/selftests/bpf/verifier/search_pruning.c
··· 133 133 .prog_type = BPF_PROG_TYPE_TRACEPOINT, 134 134 }, 135 135 { 136 + "precision tracking for u32 spill/fill", 137 + .insns = { 138 + BPF_MOV64_REG(BPF_REG_7, BPF_REG_1), 139 + BPF_EMIT_CALL(BPF_FUNC_get_prandom_u32), 140 + BPF_MOV32_IMM(BPF_REG_6, 32), 141 + BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 1), 142 + BPF_MOV32_IMM(BPF_REG_6, 4), 143 + /* Additional insns to introduce a pruning point. */ 144 + BPF_EMIT_CALL(BPF_FUNC_get_prandom_u32), 145 + BPF_MOV64_IMM(BPF_REG_3, 0), 146 + BPF_MOV64_IMM(BPF_REG_3, 0), 147 + BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 1), 148 + BPF_MOV64_IMM(BPF_REG_3, 0), 149 + /* u32 spill/fill */ 150 + BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_6, -8), 151 + BPF_LDX_MEM(BPF_W, BPF_REG_8, BPF_REG_10, -8), 152 + /* out-of-bound map value access for r6=32 */ 153 + BPF_ST_MEM(BPF_DW, BPF_REG_10, -16, 0), 154 + BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 155 + BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -16), 156 + BPF_LD_MAP_FD(BPF_REG_1, 0), 157 + BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem), 158 + BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 2), 159 + BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_8), 160 + BPF_LDX_MEM(BPF_W, BPF_REG_1, BPF_REG_0, 0), 161 + BPF_MOV64_IMM(BPF_REG_0, 0), 162 + BPF_EXIT_INSN(), 163 + }, 164 + .fixup_map_hash_8b = { 15 }, 165 + .result = REJECT, 166 + .errstr = "R0 min value is outside of the allowed memory range", 167 + .prog_type = BPF_PROG_TYPE_TRACEPOINT, 168 + }, 169 + { 170 + "precision tracking for u32 spills, u64 fill", 171 + .insns = { 172 + BPF_EMIT_CALL(BPF_FUNC_get_prandom_u32), 173 + BPF_MOV64_REG(BPF_REG_6, BPF_REG_0), 174 + BPF_MOV32_IMM(BPF_REG_7, 0xffffffff), 175 + /* Additional insns to introduce a pruning point. */ 176 + BPF_MOV64_IMM(BPF_REG_3, 1), 177 + BPF_MOV64_IMM(BPF_REG_3, 1), 178 + BPF_MOV64_IMM(BPF_REG_3, 1), 179 + BPF_MOV64_IMM(BPF_REG_3, 1), 180 + BPF_EMIT_CALL(BPF_FUNC_get_prandom_u32), 181 + BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 1), 182 + BPF_MOV64_IMM(BPF_REG_3, 1), 183 + BPF_ALU32_IMM(BPF_DIV, BPF_REG_3, 0), 184 + /* u32 spills, u64 fill */ 185 + BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_6, -4), 186 + BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_7, -8), 187 + BPF_LDX_MEM(BPF_DW, BPF_REG_8, BPF_REG_10, -8), 188 + /* if r8 != X goto pc+1 r8 known in fallthrough branch */ 189 + BPF_JMP_IMM(BPF_JNE, BPF_REG_8, 0xffffffff, 1), 190 + BPF_MOV64_IMM(BPF_REG_3, 1), 191 + /* if r8 == X goto pc+1 condition always true on first 192 + * traversal, so starts backtracking to mark r8 as requiring 193 + * precision. r7 marked as needing precision. r6 not marked 194 + * since it's not tracked. 195 + */ 196 + BPF_JMP_IMM(BPF_JEQ, BPF_REG_8, 0xffffffff, 1), 197 + /* fails if r8 correctly marked unknown after fill. */ 198 + BPF_ALU32_IMM(BPF_DIV, BPF_REG_3, 0), 199 + BPF_MOV64_IMM(BPF_REG_0, 0), 200 + BPF_EXIT_INSN(), 201 + }, 202 + .result = REJECT, 203 + .errstr = "div by zero", 204 + .prog_type = BPF_PROG_TYPE_TRACEPOINT, 205 + }, 206 + { 136 207 "allocated_stack", 137 208 .insns = { 138 209 BPF_ALU64_REG(BPF_MOV, BPF_REG_6, BPF_REG_1),
+32
tools/testing/selftests/bpf/verifier/spill_fill.c
··· 176 176 .prog_type = BPF_PROG_TYPE_SCHED_CLS, 177 177 }, 178 178 { 179 + "Spill u32 const scalars. Refill as u64. Offset to skb->data", 180 + .insns = { 181 + BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, 182 + offsetof(struct __sk_buff, data)), 183 + BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, 184 + offsetof(struct __sk_buff, data_end)), 185 + /* r6 = 0 */ 186 + BPF_MOV32_IMM(BPF_REG_6, 0), 187 + /* r7 = 20 */ 188 + BPF_MOV32_IMM(BPF_REG_7, 20), 189 + /* *(u32 *)(r10 -4) = r6 */ 190 + BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_6, -4), 191 + /* *(u32 *)(r10 -8) = r7 */ 192 + BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_7, -8), 193 + /* r4 = *(u64 *)(r10 -8) */ 194 + BPF_LDX_MEM(BPF_H, BPF_REG_4, BPF_REG_10, -8), 195 + /* r0 = r2 */ 196 + BPF_MOV64_REG(BPF_REG_0, BPF_REG_2), 197 + /* r0 += r4 R0=pkt R2=pkt R3=pkt_end R4=inv,umax=65535 */ 198 + BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_4), 199 + /* if (r0 > r3) R0=pkt,umax=65535 R2=pkt R3=pkt_end R4=inv,umax=65535 */ 200 + BPF_JMP_REG(BPF_JGT, BPF_REG_0, BPF_REG_3, 1), 201 + /* r0 = *(u32 *)r2 R0=pkt,umax=65535 R2=pkt R3=pkt_end R4=inv20 */ 202 + BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_2, 0), 203 + BPF_MOV64_IMM(BPF_REG_0, 0), 204 + BPF_EXIT_INSN(), 205 + }, 206 + .result = REJECT, 207 + .errstr = "invalid access to packet", 208 + .prog_type = BPF_PROG_TYPE_SCHED_CLS, 209 + }, 210 + { 179 211 "Spill a u32 const scalar. Refill as u16 from fp-6. Offset to skb->data", 180 212 .insns = { 181 213 BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
+23
tools/testing/selftests/bpf/verifier/value_ptr_arith.c
··· 1078 1078 .errstr_unpriv = "R0 pointer -= pointer prohibited", 1079 1079 }, 1080 1080 { 1081 + "map access: trying to leak tained dst reg", 1082 + .insns = { 1083 + BPF_MOV64_IMM(BPF_REG_0, 0), 1084 + BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0), 1085 + BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), 1086 + BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), 1087 + BPF_LD_MAP_FD(BPF_REG_1, 0), 1088 + BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem), 1089 + BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1), 1090 + BPF_EXIT_INSN(), 1091 + BPF_MOV64_REG(BPF_REG_2, BPF_REG_0), 1092 + BPF_MOV32_IMM(BPF_REG_1, 0xFFFFFFFF), 1093 + BPF_MOV32_REG(BPF_REG_1, BPF_REG_1), 1094 + BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1), 1095 + BPF_STX_MEM(BPF_DW, BPF_REG_0, BPF_REG_2, 0), 1096 + BPF_MOV64_IMM(BPF_REG_0, 0), 1097 + BPF_EXIT_INSN(), 1098 + }, 1099 + .fixup_map_array_48b = { 4 }, 1100 + .result = REJECT, 1101 + .errstr = "math between map_value pointer and 4294967295 is not allowed", 1102 + }, 1103 + { 1081 1104 "32bit pkt_ptr -= scalar", 1082 1105 .insns = { 1083 1106 BPF_LDX_MEM(BPF_W, BPF_REG_8, BPF_REG_1,
+30
tools/testing/selftests/drivers/net/mlxsw/rif_mac_profiles_occ.sh
··· 72 72 ip link set $h1.10 address $h1_10_mac 73 73 } 74 74 75 + rif_mac_profile_consolidation_test() 76 + { 77 + local count=$1; shift 78 + local h1_20_mac 79 + 80 + RET=0 81 + 82 + if [[ $count -eq 1 ]]; then 83 + return 84 + fi 85 + 86 + h1_20_mac=$(mac_get $h1.20) 87 + 88 + # Set the MAC of $h1.20 to that of $h1.10 and confirm that they are 89 + # using the same MAC profile. 90 + ip link set $h1.20 address 00:11:11:11:11:11 91 + check_err $? 92 + 93 + occ=$(devlink -j resource show $DEVLINK_DEV \ 94 + | jq '.[][][] | select(.name=="rif_mac_profiles") |.["occ"]') 95 + 96 + [[ $occ -eq $((count - 1)) ]] 97 + check_err $? "MAC profile occupancy did not decrease" 98 + 99 + log_test "RIF MAC profile consolidation" 100 + 101 + ip link set $h1.20 address $h1_20_mac 102 + } 103 + 75 104 rif_mac_profile_shared_replacement_test() 76 105 { 77 106 local count=$1; shift ··· 133 104 create_max_rif_mac_profiles $count 134 105 135 106 rif_mac_profile_replacement_test 107 + rif_mac_profile_consolidation_test $count 136 108 rif_mac_profile_shared_replacement_test $count 137 109 } 138 110
-17
tools/testing/selftests/kvm/x86_64/vmx_pmu_msrs_test.c
··· 110 110 ret = _vcpu_set_msr(vm, 0, MSR_IA32_PERF_CAPABILITIES, PMU_CAP_LBR_FMT); 111 111 TEST_ASSERT(ret == 0, "Bad PERF_CAPABILITIES didn't fail."); 112 112 113 - /* testcase 4, set capabilities when we don't have PDCM bit */ 114 - entry_1_0->ecx &= ~X86_FEATURE_PDCM; 115 - vcpu_set_cpuid(vm, VCPU_ID, cpuid); 116 - ret = _vcpu_set_msr(vm, 0, MSR_IA32_PERF_CAPABILITIES, host_cap.capabilities); 117 - TEST_ASSERT(ret == 0, "Bad PERF_CAPABILITIES didn't fail."); 118 - 119 - /* testcase 5, set capabilities when we don't have PMU version bits */ 120 - entry_1_0->ecx |= X86_FEATURE_PDCM; 121 - eax.split.version_id = 0; 122 - entry_1_0->ecx = eax.full; 123 - vcpu_set_cpuid(vm, VCPU_ID, cpuid); 124 - ret = _vcpu_set_msr(vm, 0, MSR_IA32_PERF_CAPABILITIES, PMU_CAP_FW_WRITES); 125 - TEST_ASSERT(ret == 0, "Bad PERF_CAPABILITIES didn't fail."); 126 - 127 - vcpu_set_msr(vm, 0, MSR_IA32_PERF_CAPABILITIES, 0); 128 - ASSERT_EQ(vcpu_get_msr(vm, VCPU_ID, MSR_IA32_PERF_CAPABILITIES), 0); 129 - 130 113 kvm_vm_free(vm); 131 114 }
+34 -11
tools/testing/selftests/net/fcnal-test.sh
··· 455 455 ip netns del ${NSC} >/dev/null 2>&1 456 456 } 457 457 458 + cleanup_vrf_dup() 459 + { 460 + ip link del ${NSA_DEV2} >/dev/null 2>&1 461 + ip netns pids ${NSC} | xargs kill 2>/dev/null 462 + ip netns del ${NSC} >/dev/null 2>&1 463 + } 464 + 465 + setup_vrf_dup() 466 + { 467 + # some VRF tests use ns-C which has the same config as 468 + # ns-B but for a device NOT in the VRF 469 + create_ns ${NSC} "-" "-" 470 + connect_ns ${NSA} ${NSA_DEV2} ${NSA_IP}/24 ${NSA_IP6}/64 \ 471 + ${NSC} ${NSC_DEV} ${NSB_IP}/24 ${NSB_IP6}/64 472 + } 473 + 458 474 setup() 459 475 { 460 476 local with_vrf=${1} ··· 500 484 501 485 ip -netns ${NSB} ro add ${VRF_IP}/32 via ${NSA_IP} dev ${NSB_DEV} 502 486 ip -netns ${NSB} -6 ro add ${VRF_IP6}/128 via ${NSA_IP6} dev ${NSB_DEV} 503 - 504 - # some VRF tests use ns-C which has the same config as 505 - # ns-B but for a device NOT in the VRF 506 - create_ns ${NSC} "-" "-" 507 - connect_ns ${NSA} ${NSA_DEV2} ${NSA_IP}/24 ${NSA_IP6}/64 \ 508 - ${NSC} ${NSC_DEV} ${NSB_IP}/24 ${NSB_IP6}/64 509 487 else 510 488 ip -netns ${NSA} ro add ${NSB_LO_IP}/32 via ${NSB_IP} dev ${NSA_DEV} 511 489 ip -netns ${NSA} ro add ${NSB_LO_IP6}/128 via ${NSB_IP6} dev ${NSA_DEV} ··· 1250 1240 log_test_addr ${a} $? 1 "Global server, local connection" 1251 1241 1252 1242 # run MD5 tests 1243 + setup_vrf_dup 1253 1244 ipv4_tcp_md5 1245 + cleanup_vrf_dup 1254 1246 1255 1247 # 1256 1248 # enable VRF global server ··· 1810 1798 for a in ${NSA_IP} ${VRF_IP} 1811 1799 do 1812 1800 log_start 1801 + show_hint "Socket not bound to VRF, but address is in VRF" 1813 1802 run_cmd nettest -s -R -P icmp -l ${a} -b 1814 - log_test_addr ${a} $? 0 "Raw socket bind to local address" 1803 + log_test_addr ${a} $? 1 "Raw socket bind to local address" 1815 1804 1816 1805 log_start 1817 1806 run_cmd nettest -s -R -P icmp -l ${a} -I ${NSA_DEV} -b ··· 2204 2191 log_start 2205 2192 show_hint "Fails since VRF device does not support linklocal or multicast" 2206 2193 run_cmd ${ping6} -c1 -w1 ${a} 2207 - log_test_addr ${a} $? 2 "ping out, VRF bind" 2194 + log_test_addr ${a} $? 1 "ping out, VRF bind" 2208 2195 done 2209 2196 2210 2197 for a in ${NSB_IP6} ${NSB_LO_IP6} ${NSB_LINKIP6}%${NSA_DEV} ${MCAST}%${NSA_DEV} ··· 2732 2719 log_test_addr ${a} $? 1 "Global server, local connection" 2733 2720 2734 2721 # run MD5 tests 2722 + setup_vrf_dup 2735 2723 ipv6_tcp_md5 2724 + cleanup_vrf_dup 2736 2725 2737 2726 # 2738 2727 # enable VRF global server ··· 3429 3414 run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b 3430 3415 log_test_addr ${a} $? 0 "TCP socket bind to local address after device bind" 3431 3416 3417 + # Sadly, the kernel allows binding a socket to a device and then 3418 + # binding to an address not on the device. So this test passes 3419 + # when it really should not 3432 3420 a=${NSA_LO_IP6} 3433 3421 log_start 3434 - show_hint "Should fail with 'Cannot assign requested address'" 3422 + show_hint "Tecnically should fail since address is not on device but kernel allows" 3435 3423 run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b 3436 - log_test_addr ${a} $? 1 "TCP socket bind to out of scope local address" 3424 + log_test_addr ${a} $? 0 "TCP socket bind to out of scope local address" 3437 3425 } 3438 3426 3439 3427 ipv6_addr_bind_vrf() ··· 3477 3459 run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b 3478 3460 log_test_addr ${a} $? 0 "TCP socket bind to local address with device bind" 3479 3461 3462 + # Sadly, the kernel allows binding a socket to a device and then 3463 + # binding to an address not on the device. The only restriction 3464 + # is that the address is valid in the L3 domain. So this test 3465 + # passes when it really should not 3480 3466 a=${VRF_IP6} 3481 3467 log_start 3468 + show_hint "Tecnically should fail since address is not on device but kernel allows" 3482 3469 run_cmd nettest -6 -s -l ${a} -I ${NSA_DEV} -t1 -b 3483 - log_test_addr ${a} $? 1 "TCP socket bind to VRF address with device bind" 3470 + log_test_addr ${a} $? 0 "TCP socket bind to VRF address with device bind" 3484 3471 3485 3472 a=${NSA_LO_IP6} 3486 3473 log_start
+2
tools/testing/selftests/net/forwarding/forwarding.config.sample
··· 13 13 NETIFS[p6]=veth5 14 14 NETIFS[p7]=veth6 15 15 NETIFS[p8]=veth7 16 + NETIFS[p9]=veth8 17 + NETIFS[p10]=veth9 16 18 17 19 # Port that does not have a cable connected. 18 20 NETIF_NO_CABLE=eth8
+1 -1
tools/testing/selftests/net/icmp_redirect.sh
··· 311 311 ip -netns h1 ro get ${H1_VRF_ARG} ${H2_N2_IP} | \ 312 312 grep -E -v 'mtu|redirected' | grep -q "cache" 313 313 fi 314 - log_test $? 0 "IPv4: ${desc}" 314 + log_test $? 0 "IPv4: ${desc}" 0 315 315 316 316 # No PMTU info for test "redirect" and "mtu exception plus redirect" 317 317 if [ "$with_redirect" = "yes" ] && [ "$desc" != "redirect exception plus mtu" ]; then
+1 -1
tools/testing/selftests/net/toeplitz.c
··· 498 498 bool have_toeplitz = false; 499 499 int index, c; 500 500 501 - while ((c = getopt_long(argc, argv, "46C:d:i:k:r:stT:u:v", long_options, &index)) != -1) { 501 + while ((c = getopt_long(argc, argv, "46C:d:i:k:r:stT:uv", long_options, &index)) != -1) { 502 502 switch (c) { 503 503 case '4': 504 504 cfg_family = AF_INET;